golang 切片中的引用

文章目录 (?) [+]

    array := [11]byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'}
    fmt.Println(array)
    // [97 98 99 100 101 102 103 104 105 106 107]
    
    // 切片 sliceA 中的元素为 array[2]、array[3] 和 array[4]
    sliceA := array[2:5]
    fmt.Println("len:", len(sliceA), "cap:", cap(sliceA), sliceA)
    // len: 3 cap: 9 [99 100 101]
    
    // 可以在原切片基础上继续向后截取
    sliceB := sliceA[1:6]
    fmt.Println("len:", len(sliceB), "cap:", cap(sliceB), sliceB)
    // len: 5 cap: 8 [100 101 102 103 104]
    // 但不可以使用下标获取长度之外容量之内的值
    // fmt.Println(sliceB[6])
    // panic: runtime error: index out of range [6] with length 5
    
    // 第三个值为截取底层数组的容量长度
    // 下标取值范围 [2,5)
    sliceC := array[2:5:9]
    fmt.Println("len:", len(sliceC), "cap:", cap(sliceC), sliceC)
    // len: 3 cap: 7 [99 100 101]
    // 仍可以在其容量内继续向后截取
    fmt.Println(sliceC[6:7])
    // [105]
    // 特别注意的是,省略写法其默认的最大范围为其自身长度,并非容量
    // fmt.Println(sliceC[4:])
    // panic: runtime error: slice bounds out of range [4:3]
    
    // 自身重新赋值,仍可以在原切片基础上继续向后截取
    sliceD := []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'}
    sliceD = sliceD[2:5]
    fmt.Println("len:", len(sliceD), "cap:", cap(sliceD), sliceD)
    // len: 3 cap: 9 [99 100 101]
    fmt.Println(sliceD[6:7])
    // [105]


    本文标题:golang 切片中的引用
    本文链接:https://www.lanseyujie.com/post/golang-slice-reference.html
    版权声明:本文使用「署名 4.0 国际」创作共享协议,转载或使用请遵守署名协议。
    点赞 0 分享 0