为什么会发生以下现象:
a := []int{1, 2, 3} fmt.Println(a[0:]) fmt.Println(a[1:]) fmt.Println(a[2:]) fmt.Println(a[3:])// doesn't panic - why?? fmt.Println(a[4:])// panics as expected
可执行示例
a[3:] 构建一个空切片,就像一个空数组一样,它是一个有效且有用的对象(在所有语言中,而不仅仅是在Go中)。
a[3:]
空切片还仍然指向基础数组,位置和容量,有时可以扩展:
a := []int{1, 2, 3} emptySlice := a[1:1] fmt.Println(emptySlice) // [] notEmpty := emptySlice[0:2] fmt.Println(notEmpty) // [2 3]
另一方面,长度为负的切片不一致。它没有任何意义,因此被禁止。