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中文网其他相关文章!