Что происходит в слайсе при добавлении элемента

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

Ответ

При добавлении элемента в слайс происходит следующее:

  1. Если capacity хватает (len < cap), элемент добавляется в конец, len увеличивается на 1
  2. Если capacity недостаточно:
    • Создается новый массив с увеличенной capacity (обычно в 2 раза для больших слайсов)
    • Данные копируются из старого массива в новый
    • Старый массив будет удален сборщиком мусора
    • Новый элемент добавляется в конец

Пример:

s := make([]int, 2, 3) // len=2, cap=3
s = append(s, 1) // Добавляется без аллокации
s = append(s, 2) // Происходит аллокация нового массива

Важно: append возвращает новый слайс, поэтому всегда нужно сохранять результат:

s = append(s, elem)