为什么以下代码没有给出“切片边界超出范围”错误?
a := []int{0}
a = a[1:]
fmt.Println(a) // []
因为切片表达式的Go规范指出:
对于字符串,数组,指向数组的指针或切片a,主表达式
a [低:高]
构造一个子字符串或切片。
...
为了方便起见,可以省略任何索引。缺少的低索引默认为零;缺少的高索引默认为切片操作数的长度:
a [2:] //与a [2:len(a)]相同
...
对于数组或字符串,如果0 <=低<=高<= len(a),则索引在范围内,否则它们超出范围。
在您的情况下,len(a)
为1,并且a[1:]
与相同a[1:1]
,表示它在范围内。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句