Можно ли потокобезопасно параллельно писать в Map

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

Ответ

Нет, стандартный map в Go не потокобезопасен для параллельных записей. Параллельные записи могут привести к race condition и панике.

Для потокобезопасной работы с map есть несколько вариантов:

  1. Использовать sync.Mutex или sync.RWMutex для защиты доступа:
var m = make(map[string]int)
var mu sync.Mutex

func safeWrite(key string, val int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = val
}
  1. Использовать sync.Map (оптимально для read-heavy workloads):
var sm sync.Map

sm.Store("key", 42) // Потокобезопасная запись

Важно: sync.Map не всегда быстрее обычного map + mutex, нужно тестировать под конкретную нагрузку.