Sobes.tech
Назад к вопросам
Middle
4

Что произойдёт в программе с горутиной, которая пишет в канал, и range по каналу без закрытия?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Если горутина пишет в канал, а другая горутина делает range по этому каналу без его закрытия, то range будет бесконечно ждать новых значений и не завершится.

range по каналу читает значения до тех пор, пока канал не будет закрыт. Если канал не закрыт, range блокируется на операции чтения, ожидая новые данные.

В итоге программа может зависнуть или горутина с range будет висеть в ожидании, если писатель продолжает писать или перестал, но не закрыл канал.

Пример:

data := make(chan int)
go func() {
    for i := 0; i < 5; i++ {
        data <- i
    }
    // канал не закрывается
}()

for v := range data {
    fmt.Println(v) // после 5 значений будет блокировка
}

Чтобы range завершился, канал нужно закрыть с помощью close(data) после окончания записи.