foo := [5]int{0, 1, 2, 3, 4}
fmt.Println(foo[:5]) //так можно
fmt.Println(foo[5:]) //и так
fmt.Println(foo[5]) //так нет. Почему?
//Где это документировано? Как это понимать
foo[5]
это обращение к несущесвующему 5 элементу в массиве. Адресация начинается с 0 индекса и элемент с индексом 4 в нем последний.foo[:5]
fmt.Println(foo[5:]) //и так
— это пустой срез, можно еще так его получить: fmt.Println(foo[:0])
fmt.Println(foo[1:1])
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)]
a[:3] // same as a[0 : 3]
a[:] // same as a[0 : len(a)]