👣 Почему это не вызывает ошибку?



package main

import "fmt"



func main() {

slice := []int{1}

fmt.Println(slice[1:])



}


Мы ведь обращаемся к элементу слайса с индексом 1, которого нет





▶️Итак, лучше 1 раз увидеть (определение поведения слайсов от авторов), чем 100 раз услышать (читать чьи-то интерпретации)



Вот цитата:

"For arrays or strings, the indices are in range if 0 <= low <= high <= len(a), otherwise they are out of range. For slices, the upper index bound is the slice capacity cap(a) rather than the length."

Особенно важно последнее предложение



Ну и небольшой пример для полного понимания:



package main

import "fmt"



func main() {



slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}

slice1 := slice[5:6]

slice2 := slice1[1:10]

fmt.Println(slice1, slice2, cap(slice2), len(slice2))



}




Подробнее



@golang_interview