繁体   English   中英

容量何时与数组末尾不同 - 切片开头?

[英]When is capacity different from end of array - start of slice?

Go 编程语言一书中,作者陈述了以下内容(在第 4.2 节关于切片):

[切片的]长度是切片元素的数量; 它不能超过容量,通常是切片开头和底层数组结尾之间的元素数。

问题

由于作者选择使用“通常”这个词,这意味着实际上存在切片的容量与切片开始和底层数组结束之间的元素数量不同的情况——什么时候会这样?

换句话说,下面的表达式何时为true

cap(mySlice) != len(underlyingArray) - startIndexOfSlice

我能想到的唯一情况是切片为nil时,在这种情况下将没有底层数组。

完整的切片表达式可以将容量设置为低于完整的底层数组。

x := make([]string, 20)
y := x[0:10:10]

fmt.Println("x:", len(x), cap(x)) // prints x: 20 20
fmt.Println("y:", len(y), cap(y)) // prints y: 10 10

切片xy共享相同的底层数组,但y的容量小于x的容量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM