初始化
var arr1 [4]int //陣列會初始化為int型別的零值
var arr2 = [4]int //使用指定的初始值完成初始化
var arr3= [4]string //使用指定的初始值完成初始化
arr4 := [3]int //指定固定長度,不可修改
arr5 := [...]int //根據初始值的個數自行推斷陣列的長度
arr6 := [...]int // [0 1 0 5] 使用指定索引值的方式來初始化陣列
*注意
陣列是值型別,賦值和傳參會複製整個陣列。因此改變副本的值,不會改變本身的值,陣列支援 「==「、」!=」 操作符,因為記憶體總是被初始化過的切片(slice):
切片是乙個擁有相同型別元素的可變長度的序列。它是基於陣列型別做的一層封裝,支援自動擴容。切片是乙個引用型別,內部結構包含
位址
、長度(len)
和容量(cap)
定義:var name t //name變數名;t代表元素型別
var a string //宣告乙個字串切片
var b = int{} //宣告乙個整型切片並初始化
var c = bool //宣告乙個布林切片並初始化
切片的底層就是乙個陣列,所以我們可以基於陣列通過切片表示式得到切片。 切片表示式中的low
和high
表示乙個索引範圍(左包含,右不包含)
完整切片表示式:
a[min:hign:max] //容量=max-min
完整切片表示式需要滿足的條件:0 <= low <= high <= max <= cap(a)
a := [6]int
t := a[2:4:6]
t2 := a[3:5]
t3 := a[:5]
fmt.println(t, len(t), cap(t)) //[3 4] 2 4
fmt.println(t2, len(t2), cap(t2)) //[4 5] 2 3 容量等於得到的切片的底層陣列的容量
fmt.println(t3, len(t3), cap(t3)) //[1 2 3 4 5] 5 6 容量=cap(a)-min
*注意
切片是引用型別,不支援==,只能跟nil比較總結:
Golang 之陣列 切片
陣列在使用前必須宣告長度,在golang中,陣列屬於值型別,在函式傳遞中,實際傳遞的是陣列的拷貝並不是陣列指標拷貝 是一種引用型別,它是不定長的,指向底層陣列 slice底層結構 type sliceheader struct 1.如果切片的容量小於1024個元素,那麼擴容的時候slice的cap就...
golang 陣列和切片的區別
陣列是內建 build in 型別,是一組同型別資料的集合,它是值型別,通過從0開始的下標索引訪問元素值。在初始化後長度是固定的,無法修改其長度。當作為方法的引數傳入時將複製乙份陣列而不是引用同一指標。陣列的長度也是其型別的一部分,通過內建函式len array 獲取其長度。注意 和c中的陣列相比,...
golang陣列,切片
陣列 同一種資料型別的固定長度序列 陣列的定義 var a len int 比如 var a 5 int 長度是陣列型別的一部分,因此,var a 5 int 和 var a 10 int 是不同的型別 陣列的初始化 func chushi var age1 5 int var age2 int v...