Go 切片:了解容量和長度
在 Go 中使用切片時,理解容量和長度的概念至關重要。這些屬性在切片操作中發揮重要作用,並影響切片或附加時切片的行為。
考慮以下程式碼範例:
func main() { a := make([]int, 5) // [0,0,0,0,0] len=5 cap=5 b := make([]int, 0, 5) // [] len=0 cap=5 c := b[:2] // [0,0] len=2 cap=5 d := c[2:5] // [0,0,0] len=3 cap=3 }
此程式碼提出了有關長度和附加價值的各種問題。切片c 和d 的容量:
為什麼c 的長度為2 並包含[0,0]?
雖然b 最初是空的([], length=0),但需要注意的是,Go 陣列和切片始終使用其零值進行初始化。對於整數,零值為 0。因此,當您使用 [:2] 對 b 進行切片時,您將建立一個繼承 b 的零值的新切片。
為什麼 d 的容量是 3?
當你在 Go 中切片切片時,它會重複使用相同的底層陣列。在本例中,d 與 c 共享相同的後備數組。 d 的容量計算為 end-start,其中 start 和 end 分別是切片表達式 ([2:5]) 的開始和結束索引。因此,d 的容量為 5(結束)- 2(開始)= 3。
以上是Go 切片:為什麼切片 c 和 d 有各自的長度和容量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!