Back to questions
Senior
4
Что такое ёмкость (capacity) в слайсах и как она используется?
Companies where asked
Алабуга
Answer from AI
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)
Ёмкость помогает эффективно управлять памятью, уменьшая количество аллокаций при росте слайса.