Как происходит расширение слайса

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

Ответ

При добавлении элементов в слайс, если capacity недостаточно, Go автоматически создает новый массив большего размера (обычно в 2 раза при len < 1024, иначе на ~25%) и копирует туда данные. Старый массив будет собран сборщиком мусора.

Пример:

s := make([]int, 0, 2) // len=0, cap=2
s = append(s, 1)       // len=1, cap=2
s = append(s, 2)       // len=2, cap=2
s = append(s, 3)       // len=3, cap=4 (произошло расширение)

Важные моменты:

  1. Операция расширения дорогая (аллокация + копирование)
  2. При известном конечном размере лучше сразу указать capacity через make()
  3. После расширения новый слайс ссылается на другой массив