切片的長度可以用len獲得,容量由cap獲得.
s1:=make(int,5)
len(s1)可以得到長度為5,cap(s1)可以得到容量為5
s2:=make(int,5,8)
len(s2)可以得到長度為5,cap(s2)可以得到容量為8
在s1中我沒有用make說明此切片的容量,因此他的容量和長度相等都是5
在s2中使用make說明了長度,也說明了容量.
s3:=int
s4:=s3[3:6]
上面不使用make宣告切片. 切片s3的長度和容量均為8
至於s4,是把s3中下標從3到5的資料賦值給切片s4
切片s4中下標0,1,2的值則為s3中下標3,4,5的值 相當於數學上的區間[3,6) 左閉右開
所以, s4中的值為
你如果嘗試列印出s4[3],你會發現他的值為7,與s3[6]相同。
原因是切片可以向後延伸,但是不能向前延伸。
在本質上切片的底層是乙個陣列,因此s4向後延伸會取到底層陣列的值。
你如果使用cap(s4),會發現他的容量是5,同樣的道理,底層是陣列,賦值的時候他的容量大小,就是s3的容量減去3,也就是5
列印s3[3]和s4[0] 會發現值相同
如果檢視位址,會發現他們會在同乙個位址塊上取值。
同樣,你修改s3[3]的值為11,列印s4[0]的值,會發現變為11
只有當s4的切片容量大於當前的5時,你會發下,修改s3的值,s4不會在發生變化,位址也不同
原因是s4容量不夠,需要擴充套件,因此也就和之前的s3不再是同乙個底層的陣列.
Go語言學習十一 go語言切片
go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。你可以宣告乙個未指定大小的陣列來定義切片 var identifier typ...
go語言學習筆記 切片
理解 建立切片 1.make函式,語法 make 型別,長度,容量 s make int,3,5 切片s可以訪問3個元素,底層陣列擁有5個元素 注意 不允許建立長度小於容量的切片 2.建立乙個陣列的切片 arr string slice arr 1 3 hi go 從索引1到3位置的元素,不包含右邊...
Go語言學習筆記十二 Go語言切片
1 package main 23 import fmt 45 切片定義 切片是基於陣列型別的一層封裝。它非常靈活,可以自動擴容,切片是乙個引用型別 6func main else 16 b 0 100 這種寫法是錯誤的,切片必須先初始化 17var c 5 int 5 int 18 fmt.pri...