Go切片的长度和容量

Yar*_*Yar 2 arrays go slice

假设我们有这样的切片

b:= make([]int, 0, 5) // length: 0, cap: 5
Run Code Online (Sandbox Code Playgroud)

由"b"切片制成的"c"切片

c:= b[:2]  // length: 2 (?), cap: 5
Run Code Online (Sandbox Code Playgroud)

我们为什么要为"c"长度为2的问题?我也期待长度为零,就像b一样,因为我们用b表示c

two*_*two 6

是的,切片可以让你访问超出len原始切片的元素(虽然不超出它cap,或谁知道你要访问的内存).

这意味着,例如,您可以实现append类似功能,返回"增长"切片,len增加到更接近的位置cap.也就是说,append访问之间的区域len并且cap不仅可用于内置函数; 你也拥有它.看看Append:关于切片的Go博客条目中的一个示例,看它已经完成(如果有兴趣阅读整个帖子;它有助于使整个切片有意义).

切片表达式(和切片类型)和切片技巧页面上的规范也可能很有趣.