文章目录 (?) [+]

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]