package mainimport "fmt"func testCap() {//长度为8类型为string的数组a := [...]string {"a","b","c","d","e","f","g","h"}b :=a[1:3]fmt.Printf("b:%v len:%d cap:%d\n",b,len(b),cap(b))//切片再切片b = b[:cap(b)]fmt.Printf("b:%v len:%d cap:%d\n",b,len(b),cap(b))}func main() {testCap()}
上面代码:
11行输出:b:[b c] len:2 cap:7
容量为什么为7而不是数组a的原始值8:
因为切片的start是从a数组的index(1)开始截取的,不会把之前的index(0)计算在内 容量和长度是两码事,容量是指这个切片可以放多少个值,长度是切片start至end-1

15行输出:b:[b c d e f g h] len:7 cap:7
这里是指从下标0开始至容量末尾的值全部截取

注:
这种方法的切片,也是引用的数组的值,当切片修改后,原数组对应的切片位置的值也会发生相应的改变
