Sobes.tech
Middle

Bir kanala yazan ve kapanmadan kanaldan range yapan bir goroutine içeren bir programda ne olur?

sobes.tech yapay zeka

AI'dan gelen yanıt

Если горутина пишет в канал, а другая горутина делает 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) после окончания записи.