go 语言 截取0长度的Slice

截取0长度的slice

func main() {
	s1 := []int{1, 2, 3, 4, 5, 6}
	s2 := s1[1:1]

	fmt.Println(cap(s2), len(s2), s2) // 5 0 []

	s2 = s1[6:6]
	fmt.Println(cap(s2), len(s2), s2) // 0 0 []

	s2 = s1[1:2]
	fmt.Println(cap(s2), len(s2), s2) // 5 1 [2]
}

s1[1:1]表示截取的位置从第一个元素最后一个字节的后面开始,到第一个元素最后一个字节的后面结束,所以生成的slice的长度是0,容量是5(6-1)

s1[6:6]表示截取的位置从最后一个元素最后一个字节的后面开始,到最后一个元素最后一个字节的后面结束,所以生成的slice的长度是0,容量是0(6-6)

s1[1:2]表示截取的位置从第一个元素最后一个字节的后面开始,到第二个元素最后一个字节的后面结束,在这个范围内的元素只有 2,所以生成的slice的长度是1,容量是5(1-6)