Назад к вопросам
СБЕР
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) после окончания записи.