Go gotcha: Why is this index out of range?
Why does this program crash?
a := []int{1, 2, 3}
for i := 1; i <= len(a); i++ {
fmt.Println(a[i])
}
panic: runtime error: index out of range
goroutine 1 [running]:
main.main()
../main.go:3 +0xe0
Answer
In the last iteration, i
equals len(a)
which is outside the bounds of a
.
Arrays, slices and strings are indexed starting from zero so the values of a
are found at a[0]
, a[1]
, a[2]
, …, a[len(a)-1]
.
Loop from 0
to len(a)-1
instead:
for i := 0; i < len(a); i++ {
fmt.Println(a[i])
}
or, better yet, use a range loop:
for _, n := range a {
fmt.Println(n)
}
Comments
Be the first to comment!