Что такое механизм эвакуации в Go

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

Ответ

Механизм эвакуации (evacuation) в Go — это процесс перераспределения элементов хэш-таблицы (map) при её росте или сжатии. Когда map достигает определённого порога заполнения (load factor), Go создаёт новую хэш-таблицу большего размера и постепенно переносит (эвакуирует) элементы из старой в новую.

Особенности:

  1. Эвакуация происходит постепенно (incremental) — при каждом обращении к map переносится несколько элементов.
  2. Во время эвакуации map может находиться в "переходном" состоянии, когда часть данных в старой таблице, часть — в новой.
  3. Это позволяет избежать резких скачков производительности при изменении размера map.

Пример:

m := make(map[int]string, 10)
for i := 0; i < 1000; i++ {
    m[i] = fmt.Sprintf("value%d", i) // при переполнении начнётся эвакуация
}