Какова скорость добавления в конец slice

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

Ответ

Добавление в конец slice (через append) имеет амортизированную сложность O(1). В худшем случае (когда capacity превышен) происходит аллокация нового массива и копирование элементов — O(n), но в среднем остается O(1) благодаря удвоению capacity при переаллокации.

Пример:

s := []int{1, 2, 3}
s = append(s, 4) // O(1), если capacity достаточно

Нюансы:

  • Если capacity недостаточно, создается новый массив (обычно 2x capacity)
  • Частые переаллокации могут влиять на производительность
  • Для предсказуемой производительности можно задавать capacity через make заранее