golang的切片容量的理解

go的切片相對於數組就是它的長度不再是固定的可以自動擴容

在定義上只是比數組少了固定長度

數組的聲明方式:

var 數組變量名 [元素數量]T

切片的聲明方式

var name []T

切片的底層就是一個數組,所以我們可以基於數組通過切片表達式得到切片。 切片表達式中的lowhigh表示一個索引範圍(左包含,又不包含),也就是下面代碼中從數組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表示的從指針處開始切的長度,容量就是從指針處到底層數組結尾的長度

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章