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

Что такое ёмкость (capacity) в слайсах и как она используется?

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

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

sobes.tech AI

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

Когда создаётся слайс, его длина — это количество элементов, которые он содержит, а ёмкость — размер базового массива, начиная с позиции первого элемента слайса.

Если при добавлении элементов с помощью append длина слайса превышает ёмкость, происходит выделение нового массива с увеличенной ёмкостью, и данные копируются в него.

Пример:

s := make([]int, 2, 5) // длина 2, ёмкость 5
fmt.Println(len(s)) // 2
fmt.Println(cap(s)) // 5

s = append(s, 1, 2, 3) // теперь длина 5, ёмкость 5

s = append(s, 4) // длина 6, ёмкость увеличена (например, 10)

Ёмкость помогает эффективно управлять памятью, уменьшая количество аллокаций при росте слайса.