Назад к вопросам
Junior — Middle
80
Как ведет себя программа при использовании range для чтения из закрытого небуферизированного канала?
Компании, где спрашивали
Самокат Тех
Ответ от нейросети
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 будет ждать (блокироваться) до появления данных или закрытия канала.