Назад к вопросам
Wildberries
Senior
4
Расскажи о работе со слайсами в Golang: как работают capacity, length и что будет при выходе за границу
Компании, где спрашивали
Ответ от нейросети
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 невозможен без перераспределения памяти.