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