Map безопасна?

Middle
913 просмотров
AFK Offer AI

Нет. Стандартная map в Go НЕ потокобезопасна. Конкурентное чтение и запись вызывает panic:

m := make(map[int]int)
// Две горутины одновременно:
go func() { m[1] = 1 }()
go func() { _ = m[1] }()
// fatal error: concurrent map read and map write

Решения:

1. sync.Mutex — универсально:

var mu sync.RWMutex
mu.RLock(); val := m[key]; mu.RUnlock()
mu.Lock(); m[key] = val; mu.Unlock()

2. sync.Map — оптимизирована для read-heavy нагрузки и стабильных ключей:

var m sync.Map
m.Store("key", 42)
val, ok := m.Load("key")

Го рантайм специально обнаруживает concurrent access к map и паникует — это не undefined behavior, а явная ошибка.

Следующий вопрос

Что такое Let's Encrypt?