首頁 > 後端開發 > Golang > 為什麼 Go 切片 c 和 d 切片後的數值和容量不同?

為什麼 Go 切片 c 和 d 切片後的數值和容量不同?

Mary-Kate Olsen
發布: 2024-12-21 02:35:10
原創
236 人瀏覽過

Why Do Go Slices `c` and `d` Have Different Values and Capacities After Slicing?

了解Go 中的切片容量和長度

透過教學學習Go 時,可能會遇到以下問題:

問題:

在下面的程式碼中,為什麼要切片 c和 d 是否使用不同的值和容量進行初始化?

func main() {
  a := make([]int, 5)
  b := make([]int, 0, 5)
  c := b[:2]
  d := c[2:5]
}
登入後複製

答案:

在 Go 中,切片由陣列支持。當使用 make 建立切片時,後備數組將使用其零值進行初始化。在本例中,它是一個整數數組,每個整數都初始化為 0。

當 c 建立為 b 的切片時,它與 b 共用相同的支援數組。由於 b 是使用零長度數組建立的,因此後備數組的前兩個元素為 0。因此,c 的長度為 2,其元素均為 0。

d 被建立為c 從索引 2 開始。它也與 c 共享相同的後備數組。但是,它的容量不同,因為它是完整的切片表達式。完整切片表達式的容量等於其第一個索引和最後一個索引之間的差,在本例中為 5 - 2 = 3。

其他資源:

  • [Go切片:用法與內部結構](https://blog.golang.org/slices)
  • [陣列、切片(和字串):「追加」的機制](https://blog.golang .org/slices-正在追加)

以上是為什麼 Go 切片 c 和 d 切片後的數值和容量不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板