Что происходит под капотом при использовании append

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

Ответ

При вызове append Go проверяет, достаточно ли capacity у слайса для добавления элементов. Если да, просто увеличивает len и копирует элементы в существующий массив. Если capacity недостаточно, создаётся новый массив (обычно с удвоенной capacity), копируются старые элементы, добавляются новые, и возвращается новый слайс.

Пример:

s := []int{1, 2}
s = append(s, 3) // Может изменить или создать новый массив

Важно:

  • Возвращаемый слайс может указывать на новый массив
  • При недостаточной capacity создаётся новый массив
  • При малых размерах capacity растет в 2x, затем ~1.25x
  • Если слайс создан из массива, append может его "оторвать"