Go cap为同一基础数组返回不同的值
为了 输出是Go cap为同一基础数组返回不同的值,go,slice,Go,Slice,为了 输出是 package main import "fmt" func main() { a := make([]int, 5) printSlice("a", a) b := make([]int, 1, 5) b[0]=1 printSlice("b", b) c := b[:2] printSlice("c", c) d := b[2
package main
import "fmt"
func main() {
a := make([]int, 5)
printSlice("a", a)
b := make([]int, 1, 5)
b[0]=1
printSlice("b", b)
c := b[:2]
printSlice("c", c)
d := b[2:5]
printSlice("d", d)
}
func printSlice(s string, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n",
s, len(x), cap(x), x)
}
为什么c
有cap=5
而d
有cap=3
?因为它们都有相同的底层b
数组(应该是cap=5
)
片下的数组可以延伸到片的末端。容量是该范围的度量:它是片的长度和片之外的数组长度之和;长度达到该容量的切片可以由原始切片的新切片创建。片a的容量可以使用内置函数发现
切片可以延伸到长度之外(如果容量允许),但不能延伸到第一个元素之前。因此,容量仅包括可以在最后一个元素之后使用切片表达式“声明”的元素。因为
d
从b
的索引2
开始,而c
从索引0
开始,切片只能增长其末端,而不能增长其起点。见和。
a len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
c len=2 cap=5 [0 0]
d len=3 cap=3 [0 0 0]