sync/atomic — атомарные операции без мьютексов. Быстрее mutex для простых счётчиков и флагов.
var counter int64
// Атомарный инкремент
atomic.AddInt64(&counter, 1)
// Атомарное чтение/запись
val := atomic.LoadInt64(&counter)
atomic.StoreInt64(&counter, 100)
// Compare-and-swap (CAS)
swapped := atomic.CompareAndSwapInt64(&counter, 100, 200)
// true если counter было 100, теперь 200
С Go 1.19 — типизированные обёртки:
var counter atomic.Int64
counter.Add(1)
counter.Store(100)
val := counter.Load()
var flag atomic.Bool
flag.Store(true)
if flag.Load() { ... }
var ptr atomic.Pointer[Config]
ptr.Store(newConfig)
cfg := ptr.Load()
Используй atomic для:
- Счётчиков, флагов, метрик
- Lock-free структур данных
- Когда mutex — overkill для одной переменной