Назад к вопросам
Junior — Middle
88
Что происходит с исходным слайсом после добавления элемента через append при использовании его среза?
Ответ от нейросети
sobes.tech AI
В Go срез (slice) — это структура, которая содержит указатель на массив, длину и ёмкость. Когда вы берёте срез исходного слайса и добавляете элемент через append, поведение зависит от текущей ёмкости среза:
- Если ёмкость среза достаточна, append добавит элемент в тот же underlying array, и исходный слайс тоже «увидит» изменения, так как они разделяют один массив.
- Если ёмкости недостаточно, append создаст новый массив, скопирует туда данные и добавит элемент. В этом случае исходный слайс останется без изменений.
Пример:
original := []int{1, 2, 3}
slice := original[:2] // [1, 2]
slice = append(slice, 4) // если ёмкость позволяет, original изменится
fmt.Println(original) // может вывести [1 2 4]
Таким образом, append может изменить исходный слайс, если расширение происходит в пределах существующего массива, иначе создаётся новый массив и исходный слайс не меняется.