Middle
¿Qué sucederá en un programa con una goroutine que escribe en un canal y un rango sobre el canal sin cerrarlo?
sobes.tech AI
Respuesta de la IA
Если горутина пишет в канал, а другая горутина делает 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) после окончания записи.