В чем отличие длины и ёмкости у слайса ?

Спросят с вероятностью 8%



Слайсы обладают двумя важными характеристиками: длиной (length) и емкостью (capacity). Понимание этих характеристик помогает эффективно использовать слайсы и управлять их памятью. Рассмотрим, что такое длина и емкость слайса, в чем их различия, и как они влияют на работу слайсов.



Длина (Lenght)



Это количество элементов, которые в данный момент находятся в слайсе. Она указывает, сколько элементов можно безопасно прочитать или записать, используя индексацию.

package main



import "fmt"



func main() {

slice := []int{1, 2, 3, 4, 5}

fmt.Println("Length:", len(slice)) // Length: 5

}




Емкость (Capacity)



Это количество элементов, которые слайс может содержать без выделения дополнительной памяти. Она определяет максимальное количество элементов, которые могут быть добавлены в слайс до его расширения.

package main



import "fmt"



func main() {

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

fmt.Println("Length:", len(slice)) // Length: 3

fmt.Println("Capacity:", cap(slice)) // Capacity: 5

}




Различия:



1️⃣Длина:

Количество элементов, доступных в данный момент.

Определяется с помощью функции len.

При обращении к элементам с индексом от 0 до len(slice)-1 гарантируется безопасность.



2️⃣Емкость:

Максимальное количество элементов, которые могут быть добавлены в слайс без выделения новой памяти.

Определяется с помощью функции cap.

Может быть больше или равна длине.



Взаимосвязь длины и емкости



При создании слайса можно задать его длину и емкость. Если емкость не указана, она будет равна длине.

package main



import "fmt"



func main() {

// Слайс с длиной 3 и емкостью 5

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

fmt.Println("Length:", len(slice)) // Length: 3

fmt.Println("Capacity:", cap(slice)) // Capacity: 5



// Добавление элементов в слайс

slice = append(slice, 4, 5)

fmt.Println("Length after append:", len(slice)) // Length after append: 5

fmt.Println("Capacity after append:", cap(slice)) // Capacity after append: 5



// Добавление еще одного элемента приведет к увеличению емкости

slice = append(slice, 6)

fmt.Println("Length after another append:", len(slice)) // Length after another append: 6

fmt.Println("Capacity after another append:", cap(slice)) // Capacity after another append: 10 (емкость удвоилась)

}




Длина и емкость слайса — это важные характеристики, которые помогают управлять памятью и производительностью. Длина определяет текущее количество элементов в слайсе, а емкость — максимальное количество элементов, которые слайс может содержать без перераспределения памяти. Понимание этих характеристик позволяет эффективно работать со слайсами и управлять их динамическим размером.



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых