go的切片相對於數組就是它的長度不再是固定的可以自動擴容
在定義上只是比數組少了固定長度
數組的聲明方式:
var 數組變量名 [元素數量]T
切片的聲明方式
var name []T
切片的底層就是一個數組,所以我們可以基於數組通過切片表達式得到切片。 切片表達式中的low
和high
表示一個索引範圍(左包含,又不包含),也就是下面代碼中從數組a中選出1<=索引值<4
的元素組成切片s,得到的切片長度=high-low
,容量等於得到的切片的底層數組的容量。
通過別人文章中看到這個切片的說明,並給了示例如下:
func main() {
a := [5]int{1, 2, 3, 4, 5}
s := a[1:3] // s := a[low:high]
fmt.Printf("s:%v len(s):%v cap(s):%v\n", s, len(s), cap(s))
}
輸出:
s:[2 3] len(s):2 cap(s):4
但是我有個疑問,爲什麼的子切片的容量是得到切片數組底層的數組的容量,從示例中看到底層數組的容量應該是5,爲什麼這裏得到的確是4呢?
這個是因爲簡單表達式中第一low值其實是底層數組的指針,high表示的從指針處開始切的長度,容量就是從指針處到底層數組結尾的長度