Go語言的數組


在 Go 語言里,數組是一個長度固定的數據類型,用於存儲一段具有相同的類型的元素的連續塊。數組存儲的類型可以是內置類型,如整型或者字符串,也可以是某種結構類型。

1 數組特性

(1)內存是連續分配,CPU能把正在使用的數據緩存更久。
(2)容易計算索引,可以快速迭代數組里的所有元素。
(3)數組的每個元素類型相同,可以提供每次訪問一個元素時需要在內存中移動的距離。
因此,可以以固定速度索引數組中的任意數據,速度非常快

數組內部實現如下圖:

2 數組的聲明和初始化

四種方法聲明和初始化數組:

方法一:var 聲明
var array [5]int     // 聲明一個包含 5 個元素的整型數組

注意:聲明變量時,總會使用對應類型的零值來對變量進行初始化。

方法二:字面量聲明
array := [5]int{10, 20, 30, 40, 50}   // 用具體值初始化每個元素


方法三:用...自動計算聲明數組的長度
array := [...]int{10, 20, 30, 40, 50}    // 容量由初始化值的數量決定


方法四:聲明並指定特定元素的值
array := [5]int{1: 10, 2: 20}           // 用具體值初始化索引為 1 和 2 的元素  

注意: 符號“ := ” 只能在函數內部使用,代表go自動推測變量的類型。

3 數組的使用

package main

import "fmt"

func main() {
	var array = [...]int{1, 2, 3, 4, 5}

	// 修改元素
	array[2] = 10

	// 查詢元素
	fmt.Println("訪問數組索引為2的元素", array[2])    // 訪問數組索引為2的元素 10

	//訪問指針數組
	array2 := [5]*int{0: new(int), 1: new(int)}
	fmt.Println("指針數組元素2", array2[2])          // 指針數組元素2 <nil>

}  

 數組的使用記住以下幾點:

(1)通過索引訪問,修改元素。

(2)指針數組的初始化。

(3)長度和類型都相同的數組可以相互復制。(未演示)

4 多維數組

多維數組的聲明和初始化和一維數組類似。

// 聲明一個二維整型數組,兩個維度分別存儲 4 個元素和 2 個元素
var array [4][2]int

// 使用數組字面量來聲明並初始化一個二維整型數組
array := [4][2]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}}

// 聲明並初始化外層數組中索引為 1 個和 3 的元素
array := [4][2]int{1: {20, 21}, 3: {40, 41}}

// 聲明並初始化外層數組和內層數組的單個元素
array := [4][2]int{1: {0: 20}, 3: {1: 41}}

多維數組的使用:

// 聲明一個 2×2 的二維整型數組
var array [2][2]int

// 設置每個元素的整型值
array[0][0] = 10

// 將 array1 的索引為 1 的維度復制到一個同類型的新數組里
var array3 [2]int = array1[1]

// 將外層數組的索引為 1、內層數組的索引為 0 的整型值復制到新的整型變量里
var value int = array1[1][0]

5 函數間傳遞數組

64位操作系統上,大數組用指針傳遞,只需要8字節的內存空間。

// 分配一個需要 8 MB 的數組
var array [1e6]int

// 將數組的地址傳遞給函數 foo
foo(&array)

// 函數 foo 接受一個指向 100 萬個整型值的數組的指針
func foo(array *[1e6]int) {
	// do something
}

  

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM