Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go cap为同一基础数组返回不同的值_Go_Slice - Fatal编程技术网

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]