> Как избежать конкурентного доступа к флагу для управления состоянием в Go? (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: CloudRu

Стек: Go

> Пример ответа

Для защиты флага от конкурентного доступа в Go используйте атомарные операции из пакета sync/atomic. Это эффективнее мьютексов для простых флагов.

Пример:

GO
import "sync/atomic"
type StateManager struct {
flag int32 // 0 - выключено, 1 - включено
}
func (sm *StateManager) SetEnabled() {
atomic.StoreInt32(&sm.flag, 1)
}
func (sm *StateManager) IsEnabled() bool {
return atomic.LoadInt32(&sm.flag) == 1
}

Альтернативно, для более сложной логики используйте sync.RWMutex:

GO
type StateManager struct {
mu sync.RWMutex
flag bool
}
func (sm *StateManager) SetEnabled(v bool) {
sm.mu.Lock()
defer sm.mu.Unlock()
sm.flag = v
}
func (sm *StateManager) IsEnabled() bool {
sm.mu.RLock()
defer sm.mu.RUnlock()
return sm.flag
}

Выбор зависит от сценария: atomic - для простых операций чтения/записи, мьютекс - если нужна синхронизация нескольких полей или сложные условия.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью