Назад к вопросам
Junior
173
questionbank
Что такое len и capacity в срезах в Go?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
В Go срез (slice) состоит из трех полей: указатель на базовый массив, длина (len) и емкость (capacity).
- Длина (len): Количество элементов, фактически содержащихся в срезе. Это число доступных для использования элементов.
- Емкость (capacity): Количество элементов от начала среза до конца базового массива. Это максимальное возможное количество элементов, которое может быть добавлено в срез без перераспределения (создания нового базового массива).
// Создание среза
slice := make([]int, 5, 10)
// len(slice) вернет 5
// cap(slice) вернет 10
// s2 ссылается на тот же базовый массив
s2 := slice[2:5]
// len(s2) вернет 3 (5 - 2)
// cap(s2) вернет 8 (10 - 2)
При добавлении элементов в срез с использованием функции append, если текущая длина среза достигает его емкости, Go создает новый базовый массив большей емкости, копирует в него старые элементы и обновляет указатель среза.