Nil-канал — это канал, объявленный, но не инициализированный с помощью make.
Что произойдёт при работе с nil-каналом:
<-ch): Операция чтения без блокировки всегда будет блокировать горутину, выполняющую чтение. Программа не завершится аварийно, но горутина останется заблокированной навсегда, если только канал не будет закрыт (что невозможно для nil-канала) или не произойдет отмена через контекст.ch <- value): Операция записи без блокировки также будет блокировать горутину, выполняющую запись. Аналогично чтению, программа не завершится аварийно, но горутина останется заблокированной.close(ch)): Попытка закрыть nil-канал приведет к панике во время выполнения.Пример:
go
Использование nil-каналов может быть полезным в select-операторах для динамического отключения ветви канала, если канал еще не готов или больше не нужен.
go
В этом примере, ветвь <-ch1 в select будет игнорироваться до тех пор, пока ch1 остается nil. После его инициализации, эта ветвь становится активной.