> Что нужно помнить при добавлении элементов в слайс Go без знания точного размера (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Ozon

Стек: Go

> Пример ответа

При добавлении элементов в слайс Go без знания точного размера нужно помнить о механизме роста ёмкости (capacity). Когда количество элементов превышает ёмкость, Go выделяет новый, больший массив в памяти (обычно удваивая ёмкость для небольших слайсов, затем увеличивая на ~25% для больших). Это приводит к копированию всех существующих элементов, что может быть затратно по времени и памяти.

Ключевые моменты:

  • Используйте append(), который автоматически управляет ростом.
  • Если ожидается много добавлений, заранее задайте ёмкость через make([]T, 0, capacity) - это уменьшит количество переаллокаций.
  • После многократных append ссылки на старый базовый массив могут стать невалидными, поэтому не храните указатели на элементы слайса после добавления.
  • При работе с большими объёмами данных или в критичном по производительности коде профилируйте и рассматривайте альтернативы (например, пул слайсов или ручное управление памятью).

Пример:

GO
// Плохо: частые переаллокации
var s []int
for i := 0; i < 1000; i++ {
s = append(s, i)
}
// Хорошо: задаём ёмкость заранее
s := make([]int, 0, 1000)
for i := 0; i < 1000; i++ {
s = append(s, i)
}

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью