GO語言學習 切片

2022-06-14 06:06:12 字數 795 閱讀 8895

切片的長度可以用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...