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 切片中的引用
版权声明:本文使用「署名 4.0 国际」创作共享协议,转载或使用请遵守署名协议。
相关文章
上一篇:golang 内建函数