在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.