0
为什么下面的代码不是给出了“切片范围超出范围”错误?在Go中,为什么[1:]没有为容量= 1的片段提供索引超出界限的错误?
a := []int{0}
a = a[1:]
fmt.Println(a) // []
为什么下面的代码不是给出了“切片范围超出范围”错误?在Go中,为什么[1:]没有为容量= 1的片段提供索引超出界限的错误?
a := []int{0}
a = a[1:]
fmt.Println(a) // []
由于the Go specification for slice expressions状态:
对于一个字符串,数组,指针阵列,或分割一个,初级表达
一个[低:高]
构造一个子串或切片。
...
为了方便起见,可以省略任何索引。缺少低指数默认为零;一个丢失的高指数默认为切片操作数的长度:
一个[2:] //相同的[2:LEN(A)]
...
对于数组或字符串如果0 < =低< =高< = len(a),则指数在范围内,否则它们超出范围。
在你的情况,len(a)
为1,且a[1:]
相同a[1:1]
,这意味着它是在范围内。
相关/有趣的不常见(边缘)情况:[切片:在Go出界]错误(https://stackoverflow.com/questions/33859066/slicing-out-of-bounds-error-in-go/ 33859638#33859638) – icza