Go 切片中的长度和容量

length and capacity in Go slices

假设我们有 b 这样的切片

b:= make([]int, 0, 5) // length: 0, cap: 5

和 "c" 的切片由 "b"

的切片制成
c:= b[:2]  // length: 2 (?), cap: 5

问题是 "c" 的长度为什么是 2?我也期望长度为零,比如 b,因为我们正在从 b

中生成 c

是的,切片可以让您访问超出原始切片 len 的元素(但不会超出其 cap,或者谁知道您要访问的内存)。

这意味着,例如,您可以实现类似 append 的功能,返回一个 "grown" 切片,其中 len 增加到更接近 cap 的值。也就是说,appendlencap 之间区域的访问不仅对内置函数可用;你也有。查看有关切片的 Go 博客条目中的 Append: an example 以查看它是否完成(如果有兴趣,请阅读整个 post;它有助于使切片作为一个整体变得有意义)。

The spec on slice expressions (and slice types) and the Slice Tricks page 可能也很有趣。