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
的值。也就是说,append
对 len
和 cap
之间区域的访问不仅对内置函数可用;你也有。查看有关切片的 Go 博客条目中的 Append: an example 以查看它是否完成(如果有兴趣,请阅读整个 post;它有助于使切片作为一个整体变得有意义)。
The spec on slice expressions (and slice types) and the Slice Tricks page 可能也很有趣。
假设我们有 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
的值。也就是说,append
对 len
和 cap
之间区域的访问不仅对内置函数可用;你也有。查看有关切片的 Go 博客条目中的 Append: an example 以查看它是否完成(如果有兴趣,请阅读整个 post;它有助于使切片作为一个整体变得有意义)。
The spec on slice expressions (and slice types) and the Slice Tricks page 可能也很有趣。