Назад к вопросам
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 создает новый базовый массив большей емкости, копирует в него старые элементы и обновляет указатель среза.