在Go中,为什么对于容量= 1的切片,a [1:]为什么不给出超出范围的索引错误? [重复]
This question already has an answer here:
Why does the following code not give a "slice bounds out of range" error?
a := []int{0}
a = a[1:]
fmt.Println(a) // []
</div>
此问题已经存在 在这里有答案: p>
-
为什么要允许从len(slice)切片?
3个答案
span>
li>
ul>
div>
为什么以下代码 not em>不能给出 “切片边界超出范围”错误? p>
a:= [] int {0} a = a [1:] fmt.Println(a)// [ ] code> pre> div>
Because the Go specification for slice expressions states:
For a string, array, pointer to array, or slice a, the primary expression
a[low : high]
constructs a substring or slice.
...
For convenience, any of the indices may be omitted. A missing low index defaults to zero; a missing high index defaults to the length of the sliced operand:
a[2:] // same as a[2 : len(a)]
...
For arrays or strings, the indices are in range if 0 <= low <= high <= len(a), otherwise they are out of range.
In your case, len(a)
is 1, and a[1:]
is the same as a[1:1]
, which means it is within range.