Мой код:
package main
import (
"fmt"
)
func main() {
a := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
b := a[1:4]
fmt.Println("a:", a)
fmt.Println("b:", b)
// Works fine even though c is indexing past the end of b.
c := b[4:7]
fmt.Println("c:", c)
// This fails with panic: runtime error: index out of range [4] with length 3
// d := b[4]
}
Выход:
a: [0 1 2 3 4 5 6 7 8 9]
b: [1 2 3]
c: [5 6 7]
Если я раскомментирую строку, содержащую d := b[4]
, это приведет к этой ошибке:
panic: runtime error: index out of range [4] with length 3
Мой вопрос:
Почему можно получить доступ к b[4:7]
, даже если индекс 4 находится за пределами допустимого диапазона для b
, длина которого равна 3, но нельзя получить доступ к b[4]
? Какие правила языка Go объясняют такое поведение?