Sobes.tech
Junior — Middle
110

Жабық буферсіз каналдан оқу үшін range қолданғанда бағдарлама қалай әрекет етеді?

Сұралған компаниялар
Самокат Тех

AI-дан жауап

sobes.tech AI

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

Для небуферизированного канала это работает так же, как и для буферизированного: если канал закрыт, range не блокируется и выходит из цикла.

Пример:

ch := make(chan int)
go func() {
    ch <- 1
    ch <- 2
    close(ch)
}()

for v := range ch {
    fmt.Println(v) // Выведет 1 и 2, затем цикл завершится
}

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