Go語言中陣列的內部實現和基礎功能

2022-03-24 15:56:19 字數 2002 閱讀 3163

因為陣列是切片和對映的基礎資料結構。理解了陣列的工作原理,有助於理解切片和對映提供的優雅和強大的功能。

在go語言裡,陣列是乙個長度固定的資料型別,用於儲存一段具有相同的型別的元素的連續塊。

下圖中可以到陣列的表示。

陣列是一種非常有用的資料結構,因為其占用的記憶體是連續分配的。由於記憶體連續,cpu能把正在使用的資料快取更久的時間。而且記憶體連續很容易計算索引,可以快速迭代陣列裡的所有元素。陣列的型別資訊可以提供每次訪問乙個元素時需要在記憶體中移動的距離。

宣告陣列時需要指定內部儲存的資料的型別,以及需要儲存的元素的數量,這個數量也稱為陣列的長度,如下:

// 宣告乙個包含5個元素的整型陣列

一種快速建立陣列並初始化的方式是使用陣列字面量。

要訪問陣列裡某個單獨元素,使用運算子,如:

// 宣告乙個包含5個元素的整型陣列

// 用具體值初始化為每個元素

array := [5]int

// 修改索引為2的元素的值

array[2] = 35

使用*運算子就可以訪問元素指標所指向的值,如:

// 宣告包含5個元素的指向整數的陣列

// 用整型指標初始化索引為0和1的陣列元素

array := [5]*int

// 為索引為0和1的元素賦值

在go語言裡,陣列是乙個值。這意味著陣列可以用在賦值操作中。變數名代表整個陣列,因此,同樣型別的陣列可以賦值給另乙個陣列:

// 宣告乙個包含5個元素的字串陣列

var array1 [5]string

// 宣告第二個包含5個元素的字串陣列

// 用顏色初始化陣列

array2 := [5]string

// 把array2的值複製到array1

陣列變數的型別包括陣列長度和每個元素的型別。只有這兩部分都相同的陣列,才是型別相同的陣列,才能互相賦值。

複製指標陣列,只會複製指標的值,而不會複製指標所指向的值。

陣列本身只有乙個維度,不過可以組合多個陣列建立多維陣列。

var array [4][2]int

array := [4][2]int,,,}

array := [4][2]int,3: }

array := [4][2]int,3: }

go 指標陣列 go語言中的指標陣列

宣告乙個包含有5個整數指標型別的陣列,我們可以在初始化時給相應位置的元素預設值。下面是給索引為0的元素乙個新建的的int型別指標 預設為0 給索引為1的元素指向值v的位址,剩下的沒有指定預設值的元素為指標的zero值也就是nil package main import fmt func main f...

Go語言中陣列和slice的區別

go語言中陣列是具有固定長度而且擁有零個或者多個相同或相同資料型別元素的序列。由於陣列長度固定,所以在go語言比較少直接使用。而slice長度可增可減,使用場合比較多。更深入的區別在於 陣列在使用的過程中都是值傳遞,將乙個陣列賦值給乙個新變數或作為方法引數傳遞時,是將源陣列在記憶體中完全複製了乙份,...

go語言中slice的實現

slice是我們使用go語言時最經常使用的資料結構,所以我們還是有必要研究一下它的實現的,尤其是slice的擴容,具體實現參考src runtime slice.go。slice定義 type slice struct根據growslice函式的名稱,可以很容易的猜到這就是slice擴容的實現。if...