![](/img/trans.png)
[英]Is there any short way to slice an array from end to start without looping?
[英]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
切片x
和y
共享相同的底层数组,但y
的容量小于x
的容量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.