Назад к вопросам
Senior
6
Что произойдёт со слайсом в Go, если его capacity равна 8 и мы пытаемся добавить девятый элемент?
Компании, где спрашивали
plata
Ответ от нейросети
sobes.tech AI
В Go слайс — это структура, которая содержит указатель на массив, длину (len) и емкость (capacity). Емкость — это максимальное количество элементов, которое может вместить текущий массив.
Если у слайса capacity равна 8, и мы пытаемся добавить девятый элемент с помощью append, то происходит следующее:
- Go выделит новый массив с увеличенной емкостью (обычно в 2 раза больше текущей, то есть примерно 16).
- Скопирует все существующие элементы в новый массив.
- Добавит новый элемент.
- Вернёт новый слайс, указывающий на этот новый массив с обновлённой длиной и емкостью.
Таким образом, append автоматически расширяет слайс при превышении capacity, обеспечивая динамическое увеличение размера.
Пример:
s := make([]int, 8, 8) // длина и емкость 8
s = append(s, 9) // добавляем 9-й элемент
fmt.Println(len(s)) // 9
fmt.Println(cap(s)) // >= 9, обычно 16