Как устроен Map в Go?

Middle
2.6k просмотров
AFK Offer AI

Map в Go — хеш-таблица. Под капотом структура hmap с массивом бакетов. Каждый бакет хранит до 8 пар ключ-значение.

При заполнении больше чем на ~6.5 элементов на бакет — map растёт вдвое. Старые бакеты копируются в новые постепенно (incremental growth).

m := make(map[string]int)
m["key"] = 42
val, ok := m["key"] // ok = true

Важно: map НЕ потокобезопасна. Конкурентная запись = panic. Нужен sync.RWMutex или sync.Map.

Порядок итерации через range — рандомный, специально. Go сознательно рандомизирует чтобы разработчики не завязывались на порядок.

Следующий вопрос

Что делает defer?