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 будет ждать (блокироваться) до появления данных или закрытия канала.