Вопрос на собеседовании · Go-разработчик

Почему map не потокобезопасна и что будет при конкурентной записи?

Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.

Обновлено 25 сентября 2026 г.базовая тема
Go-разработчикПрофессии и разделы
Короткий ответ

Обычная map в Go не поддерживает конкурентную запись и одновременное чтение с записью без синхронизации. Такие операции создают data race, могут завершить программу runtime-ошибкой и в любом случае делают поведение некорректным.

Типичное решение — защищать карту sync.Mutex или sync.RWMutex и определить единое место владения. sync.Map полезна для специальных профилей нагрузки, но не является автоматической заменой map с мьютексом.

01 · Структура ответа

Что важно сказать интервьюеру

Раскройте тезисы, которые относятся именно к этому вопросу, и поясните их на собственном примере:

Параллельное чтение допустимо, только если никто не изменяет map.
Проверку и изменение составного инварианта нужно выполнять под одной блокировкой.
Копирование мьютекса после начала использования запрещено.
go test -race помогает обнаружить гонки, но не доказывает их отсутствие во всех путях.

02 · Пример

Как объяснить на практике

Кеш хранит map и RWMutex. Get берёт RLock, Set — Lock. Операция get-or-create не должна отпускать блокировку между проверкой и записью, иначе два запроса одновременно создадут одно значение.

Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.

03 · Ошибки

Чего избегать в ответе

Защищать только запись, оставляя чтения без блокировки.
Считать отдельные потокобезопасные операции достаточными для составного бизнес-инварианта.
Выбирать sync.Map без анализа профиля чтений, записей и типов ключей.

04 · Углубление

Что могут спросить следом

  1. Когда использовать RWMutex?
  2. Для чего подходит sync.Map?
  3. Как организовать карту через одну goroutine-владельца?

05 · Проверка фактов

Первоисточники по теме

Ссылки ниже помогают проверить понятия, методы и ограничения по теме. Они не являются доказательством того, что этот вопрос задают на каждом собеседовании.

  • Go Blog: Go maps in action — Использование map и синхронизация конкурентного доступа.

Практика ответа

Ответьте вслух, а не про себя

Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с подсказкой.

Потренировать ответ