快速理解Go陣列和切片的內部實現原理

2021-08-22 18:11:19 字數 520 閱讀 7342

很多人對go語言的arrayslice傻傻分不清楚,今天我們就從底層出發,來聊聊它倆到底有什麼區別。

幾乎所有計算機語言,陣列的實現都是相似的:一段連續的記憶體,go語言也一樣,go語言的陣列底層實現就是一段連續的記憶體空間。每個元素有唯一乙個索引(或者叫下標)來訪問。如下圖所示,下圖是[5]int陣列的內部實現邏輯圖:

由於記憶體連續,cpu很容易計算索引(即陣列的下標),可以快速迭代陣列裡的所有元素。

go語言的陣列不同於c語言或者其他語言的陣列,c語言的陣列變數是指向陣列第乙個元素的指標;而go語言的陣列是乙個值,go語言中的陣列是值型別,乙個陣列變數就表示著整個陣列,意味著go語言的陣列在傳遞的時候,傳遞的是原陣列的拷貝。你可以理解為go語言的陣列是一種有序的struct

Go 陣列和切片

陣列擷取 a 開始索引位置,結束索引 切片 slice 是本身並非動態陣列和陣列指標,通過內部指標指向底層陣列。建立乙個length和capacity都等於5的slice slice make int,5 length 3,capacity 5的slice slice make int,3,5 建立...

Go 陣列 和 切片(array slice)

與其他大多數語言類似,go語言的陣列也是乙個元素型別相同的定長的序列。陣列有 3 種建立方式 1 length type 2 length type 3 type 如下 func test5 arr3 5 int32 arr4 5 int32 arr5 int32 arr6 4 4 int32,fm...

go語言 陣列和切片

目錄切片 var variable name size variable type 預設值為0eg var ss 10 int var s1 5 int方法一 for i 0 i len arry i 方法二 for index,value range array 儲存了三個一維陣列,每個一位陣列長...