Как map хранит данные внутри

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

Ответ

Map в Go — это хэш-таблица, которая хранит пары ключ-значение. Под капотом она использует массив бакетов (buckets), каждый из которых содержит список элементов.

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

  • При добавлении элемента вычисляется хэш ключа, определяющий бакет.
  • Если хэши ключей совпадают (коллизия), элементы хранятся в связном списке внутри бакета.
  • При росте числа элементов map автоматически ресайзится, увеличивая количество бакетов.

Пример:

m := make(map[string]int)
m["foo"] = 42  // Хэш "foo" → бакет → сохранение
val, ok := m["foo"] // Поиск по хэшу

Нюансы:

  • Порядок итерации не гарантирован (рандомизован).
  • Нельзя брать адрес элемента map (он может перемещаться при ресайзе).
  • Нулевое значение map — nil, попытка записи вызовет панику.