为什么以下代码不会给出“切片边界超出范围”错误?
a := []int{0}
a = a[1:]
fmt.Println(a) // []
Run Code Online (Sandbox Code Playgroud)
因为切片表达式的 Go 规范指出:
对于字符串、数组、数组指针或切片 a,主表达式
一个[低:高]
构造一个子字符串或切片。
...
为了方便起见,可以省略任何索引。缺失的低指数默认为零;缺失的高索引默认为切片操作数的长度:
a[2:] // 与 a[2 : len(a)] 相同
...
对于数组或字符串,如果 0 <= low <= high <= len(a),则索引在范围内,否则索引超出范围。
在您的情况下,len(a)是 1,并且a[1:]与 相同a[1:1],这意味着它在范围内。
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |