Sobes.tech
Назад к вопросам
Junior — Middle
80

Может ли использование 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 будет ждать новые значения бесконечно.