Junior — Middle
Pourquoi l'utilisation de variables pour échanger des données entre goroutines peut-elle entraîner des erreurs ou des problèmes?
sobes.tech IA
Réponse de l'IA
Использование переменных для обмена данными между горутинами без синхронизации может привести к состояниям гонки (race conditions), когда несколько горутин одновременно читают и записывают в одну и ту же переменную. Это вызывает непредсказуемое поведение программы, ошибки и сложности в отладке.
Для безопасного обмена данными между горутинами в Go рекомендуется использовать каналы (channels) или механизмы синхронизации из пакета sync (например, mutex), которые обеспечивают корректный доступ и предотвращают гонки.
Пример проблемы с переменной без синхронизации:
var counter int
func increment() {
counter = counter + 1 // может привести к гонке
}
func main() {
for i := 0; i < 1000; i++ {
go increment()
}
time.Sleep(time.Second)
fmt.Println(counter) // результат может быть меньше 1000
}
Использование канала или mutex решит эту проблему.