下面的go代码:
var numbers4 = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
slice := numbers4[4:6:8]
fmt.Printf("%d\n", cap(slice))
Run Code Online (Sandbox Code Playgroud)
为什么cap(slice)等于4?
我以前以为应该是这样2。
numbers4[4:6:8]是一个完整的切片表达式:
对于数组、指向数组的指针或切片
a(但不是字符串),主表达式Run Code Online (Sandbox Code Playgroud)a[low : high : max]构造一个与简单切片表达式 相同类型、相同长度和元素的切片
a[low : high]。此外,它还通过将结果设置为 来控制生成的切片的容量max - low。
规范说完整的切片表达式控制容量,将其限制为max - low,在您的情况下是8 - 4 = 4。
容量不是切片可以扩展的“额外”元素,容量是切片可以扩展的最大长度,包括当前长度+超出长度的额外元素。
slice := numbers4[4:6:8]
len(slice) = 6 - 4 = 2
cap(slice) = 8 - 4 = 4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1069 次 |
| 最近记录: |