Что можно сделать с map, чтобы не было паники при записи несколькими потоками

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

Ответ

Используй sync.RWMutex для безопасного доступа к map из нескольких горутин. Чтение блокируется через RLock(), запись через Lock().

var (
    data = make(map[string]int)
    mu   sync.RWMutex
)

// Запись
mu.Lock()
data["key"] = 42
mu.Unlock()

// Чтение
mu.RLock()
val := data["key"]
mu.RUnlock()

Альтернатива - sync.Map (из коробки), если ключи часто меняются. Он медленнее в простых сценариях, но не требует ручной блокировки:

var sm sync.Map
sm.Store("key", 42)
val, _ := sm.Load("key")