Назад к вопросам
Junior — Middle
79
Может ли использование Range с каналом привести к бесконечному циклу в программе?
Компании, где спрашивали
Ecom.tech
Ответ от нейросети
sobes.tech AI
Да, использование range с каналом в Go может привести к бесконечному циклу, если канал никогда не закрывается. Цикл for range по каналу продолжает получать значения, пока канал открыт. Когда канал закрывается, цикл завершается.
Если в программе есть горутина, которая пишет в канал, но канал не закрывается после завершения передачи данных, то range будет ждать новые значения бесконечно, что приведет к бесконечному циклу или блокировке.
Пример правильного использования:
ch := make(chan int)
go func() {
for i := 0; i < 5; i++ {
ch <- i
}
close(ch) // Закрываем канал, чтобы range завершился
}()
for val := range ch {
fmt.Println(val)
}
Если убрать close(ch), цикл for range будет ждать новые значения бесконечно.