首頁 >後端開發 >Golang >Go 切片:為什麼切片 c 和 d 有各自的長度和容量?

Go 切片:為什麼切片 c 和 d 有各自的長度和容量?

Patricia Arquette
Patricia Arquette原創
2024-12-28 20:23:13719瀏覽

Go Slices: Why Do Slices c and d Have Their Respective Lengths and Capacities?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn