В чем разница между длиной и емкостью слайса

«В чем разница между длиной и емкостью слайса» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Длина (len) - текущее количество элементов в слайсе. Емкость (cap) - максимальное количество элементов, которое слайс может вместить без переаллокации памяти.

Пример:

s := make([]int, 3, 5) // len=3, cap=5
fmt.Println(len(s)) // 3
fmt.Println(cap(s)) // 5

Ключевые отличия:

  • len можно изменять в пределах cap (s = s[:4])
  • cap увеличивается автоматически при append, если не хватает места
  • cap показывает, сколько памяти выделено под слайс "под капотом"

При append, если len == cap, создается новый массив с увеличенной емкостью (обычно в 2 раза) и копируются данные.