Что происходит при записи значения в map по ключу 123? Как значение попадает в хранилище?

В Go при записи значения в map по ключу, например m[123] = value, происходит несколько шагов:

Короткий ответ

Что ответить на собеседовании

В Go при записи значения в map по ключу, например m[123] = value, происходит несколько шагов:

Подробный разбор

Ответ с пояснениями

В Go при записи значения в map по ключу, например m[123] = value, происходит несколько шагов:

  1. Хеширование ключа: Ключ 123 преобразуется в хеш с помощью внутренней хеш-функции, специфичной для типа ключа.
  2. Определение бакета: По хешу вычисляется индекс бакета (корзины) в массиве бакетов, где будет храниться пара ключ-значение.
  3. Поиск позиции в бакете: В выбранном бакете происходит поиск свободной ячейки или ячейки с таким же ключом.
  4. Запись значения: Если ключ уже есть, значение обновляется. Если ключа нет, создаётся новая запись с ключом и значением.
  5. Реорганизация при необходимости: Если бакет переполнен, карта может быть перераспределена (resize) — создаётся новый массив бакетов большего размера, и все пары перераспределяются.

Вся эта логика реализована в runtime Go и оптимизирована для скорости. Значение попадает в хранилище — внутреннюю структуру map, которая представляет собой массив бакетов с цепочками или открытой адресацией для коллизий.

Пример:

m := make(map[int]string)
m[123] = "example"

При этом 123 хешируется, определяется бакет, и значение "example" сохраняется в соответствующем месте в памяти.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку