1. package main
    2. import "fmt"
    3. func testCap() {
    4. //长度为8类型为string的数组
    5. a := [...]string {"a","b","c","d","e","f","g","h"}
    6. b :=a[1:3]
    7. fmt.Printf("b:%v len:%d cap:%d\n",b,len(b),cap(b))
    8. //切片再切片
    9. b = b[:cap(b)]
    10. fmt.Printf("b:%v len:%d cap:%d\n",b,len(b),cap(b))
    11. }
    12. func main() {
    13. testCap()
    14. }

    上面代码:
    11行输出:
    b:[b c] len:2 cap:7
    容量为什么为7而不是数组a的原始值8:

    因为切片的start是从a数组的index(1)开始截取的,不会把之前的index(0)计算在内 容量和长度是两码事,容量是指这个切片可以放多少个值,长度是切片start至end-1

    image.png

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

    image.png

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