Проверяет знание тонких, но важных различий в поведении каналов.
Чтение из закрытого канала сразу возвращает нулевое значение и ok=false.
Чтение из nil-канала блокируется навсегда.
v, ok := <-ch
v — нулевое значение типа (0, "", nil);
ok == false;
операция не блокируется.
Это позволяет корректно завершать циклы:
for v := range ch {
process(v)
}var ch chan int
<-ch // блокируется навсегдаВывод:
Закрытый канал — завершённый поток данных.
Nil-канал — “выключенный” канал.