Как определить Race Condition в коде

«Как определить Race Condition в коде» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Race condition возникает, когда несколько горутин одновременно обращаются к общим данным, и хотя бы одна из них выполняет запись. Для обнаружения можно:

  1. Использовать -race флаг при запуске или тестировании:
go run -race main.go
go test -race ./...
  1. Искать места с общим доступом к переменным без синхронизации:
var counter int

func increment() {
    counter++ // потенциальная гонка
}
  1. Проверять использование каналов, мьютексов или других примитивов синхронизации:
var mu sync.Mutex

func safeIncrement() {
    mu.Lock()
    defer mu.Unlock()
    counter++ // безопасно
}

Race detector в Go отлично помогает находить такие проблемы, но не гарантирует обнаружение всех случаев. Лучшая практика - проектировать код так, чтобы минимизировать общее состояние между горутинами.