Sobes.tech
Back to questions
Senior
5

Что произойдёт со слайсом в Go, если его capacity равна 8 и мы пытаемся добавить девятый элемент?

Companies where asked
plata

Answer from AI

sobes.tech AI

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

Если у слайса capacity равна 8, и мы пытаемся добавить девятый элемент с помощью append, то происходит следующее:

  • Go выделит новый массив с увеличенной емкостью (обычно в 2 раза больше текущей, то есть примерно 16).
  • Скопирует все существующие элементы в новый массив.
  • Добавит новый элемент.
  • Вернёт новый слайс, указывающий на этот новый массив с обновлённой длиной и емкостью.

Таким образом, append автоматически расширяет слайс при превышении capacity, обеспечивая динамическое увеличение размера.

Пример:

s := make([]int, 8, 8) // длина и емкость 8
s = append(s, 9)        // добавляем 9-й элемент
fmt.Println(len(s))     // 9
fmt.Println(cap(s))     // >= 9, обычно 16