【发布时间】:2015-12-22 19:36:43
【问题描述】:
假设我们有这样的 b 切片
b:= make([]int, 0, 5) // length: 0, cap: 5
和由“b”切片组成的“c”切片
c:= b[:2] // length: 2 (?), cap: 5
为什么我们的“c”长度为 2?我也期望长度为零,比如 b,因为我们是用 b 制作 c
【问题讨论】:
假设我们有这样的 b 切片
b:= make([]int, 0, 5) // length: 0, cap: 5
和由“b”切片组成的“c”切片
c:= b[:2] // length: 2 (?), cap: 5
为什么我们的“c”长度为 2?我也期望长度为零,比如 b,因为我们是用 b 制作 c
【问题讨论】:
是的,切片可以让您访问原始切片的len 之外的元素(尽管不能超过其cap,或者谁知道您将访问什么内存)。
这意味着,例如,您可以实现类似append 的功能,返回一个“增长”的切片,其中len 增加到更接近cap。也就是说,append 对len 和cap 之间区域的访问不仅对内置函数可用;你也有。查看有关切片的 Go 博客条目中的 Append: an example 以查看它是否完成(如果有兴趣阅读整篇文章;它有助于使切片作为一个整体有意义)。
The spec on slice expressions(和slice types)和Slice Tricks page 也可能很有趣。
【讨论】: