> Что такое len и cap в слайсах Go и как они работают (Go)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: Ozon

Стек: Go

> Пример ответа

len и cap - это встроенные функции Go, которые возвращают длину и ёмкость слайса соответственно.

  • len(slice) - количество элементов, которые сейчас находятся в слайсе. Это число, которое вы видите при итерации или обращении по индексу.

  • cap(slice) - максимальное количество элементов, которое может вместить слайс без перераспределения памяти (reallocation). Оно определяется размером базового массива, на который ссылается слайс, минус смещение от начала массива.

Как они работают:
Слайс - это структура из трёх полей: указатель на элемент массива, длина и ёмкость. len и cap просто читают эти поля. При создании слайса через make([]T, length, capacity) вы явно задаёте оба значения. Если capacity не указан, он равен length.

Пример:

GO
arr := [5]int{1, 2, 3, 4, 5}
s := arr[1:4] // s = [2, 3, 4]
fmt.Println(len(s)) // 3 (элементы с индексами 1,2,3)
fmt.Println(cap(s)) // 4 (от индекса 1 до конца массива: 4,5)

Важный нюанс: при добавлении элементов через append, если длина превышает ёмкость, Go создаёт новый массив большего размера (обычно в 2 раза), и ёмкость увеличивается. После этого cap отражает размер нового массива.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью