🟢 Лёгкий · 1 очк. Пакет sync
Чем atomic.Int64 (Go 1.19+) лучше прямого использования atomic.AddInt64?
A Быстрее работает
B Типобезопасный API с методами Add, Load, Store, Swap - без передачи указателя и проблем с выравниванием на 32-bit
C Поддерживает строки
D Работает с каналами
Объяснение вопроса

До Go 1.19 атомарные операции требовали передачи указателя и ручного контроля выравнивания на 32-bit платформах:

// Старый API (до Go 1.19) - неудобно:
var counter int64
atomic.AddInt64(&counter, 1)     // нужен &
val := atomic.LoadInt64(&counter) // нужен &
// На 32-bit: counter должен быть выровнен по 8 байт!

// Новый API (Go 1.19+) - типобезопасно:
var counter atomic.Int64
counter.Add(1)        // метод, без &
val := counter.Load() // чисто и безопасно
counter.Store(0)
old := counter.Swap(42)
swapped := counter.CompareAndSwap(42, 100)

Доступные atomic-типы: atomic.Bool, atomic.Int32, atomic.Int64, atomic.Uint32, atomic.Uint64, atomic.Uintptr, atomic.Pointer[T].

atomic.Pointer[T] (Go 1.19+) - типобезопасная замена atomic.Value для указателей конкретного типа.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.