Back to questions
Senior
5
Что такое слайс? Что под капотом у слайса? Как работает функция append?
Companies where asked
Lenta Tech
Answer from AI
sobes.tech AI
Слайс в Go — это динамический массив, который представляет собой структуру с тремя полями:
- Указатель на массив (подложенный массив в памяти)
- Длина (len) — количество элементов, доступных в слайсе
- Ёмкость (cap) — максимальное количество элементов, которое может вместить подложенный массив начиная с указателя
Под капотом слайс — это небольшая структура, примерно так:
type sliceHeader struct {
Data uintptr // указатель на первый элемент массива
Len int
Cap int
}
Функция append добавляет элементы в слайс. Если длина слайса меньше ёмкости, append просто записывает новые элементы в подложенный массив и увеличивает длину. Если же длина достигла ёмкости, append выделяет новый массив с увеличенной ёмкостью (обычно в 2 раза больше), копирует туда старые элементы, добавляет новые, и возвращает новый слайс с обновлённым указателем.
Пример:
s := []int{1, 2, 3}
s = append(s, 4) // если cap(s) > len(s), просто добавит 4
// если cap(s) == len(s), выделит новый массив, скопирует [1,2,3], добавит 4
Таким образом append может возвращать новый слайс, и важно присваивать результат обратно.