Ответ
Используй 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")