Проверяет понимание конкурентного доступа к памяти и владение инструментами отладки.
Race condition возникает, когда несколько горутин одновременно читают и пишут в одну переменную. Ловится с помощью go run -race, решается через мьютексы, атомики или каналы.
Определение: race condition — это непредсказуемое поведение программы при одновременном доступе к данным из разных потоков.
Пример:
var counter int
func main() {
for i := 0; i < 100; i++ {
go func() { counter++ }()
}
time.Sleep(time.Second)
fmt.Println(counter) // непредсказуемый результат
}Способы решения:
sync.Mutex для блокировки доступа;
sync/atomic для простых операций;
каналы для организации «очереди» операций.
Как поймать:
go run -race main.go
Вывод: всегда защищайте общие данные от одновременной записи.