0

Why does the following code not give a "slice bounds out of range" error?

a := []int{0}
a = a[1:]
fmt.Println(a) // []
w.g.l.
  • 3
  • 1
  • Also related / interesting uncommon (edge) case: [Slicing: Out of bounds error in Go](https://stackoverflow.com/questions/33859066/slicing-out-of-bounds-error-in-go/33859638#33859638) – icza May 29 '17 at 07:26

1 Answers1

5

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.

ANisus
  • 74,460
  • 29
  • 162
  • 158