Sobes.tech
Назад к вопросам
Senior
4

Расскажи о работе со слайсами в Golang: как работают capacity, length и что будет при выходе за границу

Компании, где спрашивали
WildberriesWildberries

Ответ от нейросети

sobes.tech AI

В Go слайс — это структура, которая содержит указатель на массив, длину (length) и ёмкость (capacity).

  • length — количество элементов, доступных для чтения и записи через слайс.
  • capacity — максимальное количество элементов, которые слайс может вместить, начиная с текущего указателя.

При создании слайса, например:

s := make([]int, 3, 5)

length будет 3, capacity — 5.

Если обратиться к элементу с индексом, превышающим length, например s[3], будет panic: runtime error: index out of range.

Однако можно расширить слайс с помощью операции среза, если индекс не превышает capacity:

s = s[:5] // теперь length = 5

Если при добавлении элементов длина превысит capacity, Go создаст новый массив с увеличенной capacity, скопирует данные и вернёт новый слайс.

Таким образом, length — это текущая длина слайса, а capacity — максимальная длина без выделения новой памяти. Выход за length приводит к ошибке, а выход за capacity невозможен без перераспределения памяти.