Является ли map потокобезопасной?

Middle
1.1k просмотров
AFK Offer AI

Нет. Map в Go не потокобезопасна. Конкурентное чтение — допустимо. Конкурентная запись или чтение + запись — вызывает fatal error: concurrent map writes (не panic, а именно fatal — не перехватишь через recover).

m := make(map[string]int)
// Две горутины пишут — fatal error
go func() { m["a"] = 1 }()
go func() { m["b"] = 2 }()

Go рантайм детектит конкурентный доступ к map и падает намеренно — это лучше, чем тихая порча данных. Для защиты используй sync.Mutex, sync.RWMutex или sync.Map. Race detector (go run -race) помогает найти такие проблемы на этапе тестирования.

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

Что такое JSONB в PostgreSQL?