На сколько увеличивается слайс при использовании append

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

Ответ

При добавлении элементов в слайс с помощью append, его емкость (capacity) увеличивается по следующему алгоритму:

  1. Если текущая емкость достаточна для нового элемента - слайс просто расширяется в пределах существующего массива
  2. Если места не хватает, выделяется новый массив с увеличенной емкостью:
    • Для слайсов с capacity < 1024 - удваивается текущая емкость
    • Для слайсов с capacity >= 1024 - увеличивается на 25%

Пример:

s := make([]int, 0, 1) // len=0, cap=1
s = append(s, 1)       // len=1, cap=1 (вмещается)
s = append(s, 2)       // len=2, cap=2 (удвоение)
s = append(s, 3)       // len=3, cap=4 (удвоение)

Это поведение оптимизирует баланс между производительностью (минимизация аллокаций) и использованием памяти.