Ответ
При взятии среза слайса и выполнении append возможны 2 сценария:
-
Если capacity исходного слайса позволяет (новые элементы помещаются в существующий буфер), то:
- Изменения через новый срез повлияют на исходный слайс
appendдобавит элементы в общий буфер
-
Если capacity недостаточно, то:
- Будет создан новый буфер
- Исходный слайс не изменится
- Новый срез будет ссылаться на новый буфер
Пример:
a := []int{1, 2, 3, 4}
b := a[:2] // [1, 2]
b = append(b, 5) // изменяет a[2], т.к. capacity хватает
// a = [1, 2, 5, 4], b = [1, 2, 5]
c := a[:2:2] // force capacity=2
c = append(c, 6) // создает новый буфер
// a = [1, 2, 5, 4], c = [1, 2, 6]