Sobes.tech
Back to questions
Junior — Middle
87

Какие последствия могут возникнуть, если попытаться добавить элементы в слайс, превысив его текущую вместимость?

Answer from AI

sobes.tech AI

Если при добавлении элементов в слайс в Go его текущая вместимость (capacity) будет превышена, происходит выделение нового массива с увеличенной вместимостью, и все существующие элементы копируются в этот новый массив.

Это приводит к следующим последствиям:

  • Увеличение использования памяти — выделяется новый массив, старый остаётся в памяти до сборки мусора.
  • Копирование данных — операция копирования может быть затратной при больших слайсах.
  • Изменение адреса underlying array — если у вас есть ссылки на старый массив, они станут неактуальны.

Пример:

s := make([]int, 0, 2) // длина 0, вместимость 2
s = append(s, 1, 2)    // теперь длина 2
s = append(s, 3)       // вместимость превышена, выделяется новый массив

Поэтому при работе с большими слайсами рекомендуется заранее задавать достаточную вместимость, если известен ожидаемый размер.