Можно ли читать из nil-канала?

Чтение из nil-канала допустимо синтаксически, но блокируется навсегда. В select такая ветка никогда не готова и может использоваться для временного отключения канала.

Короткий ответ

Что ответить на собеседовании

Чтение из nil-канала допустимо синтаксически, но блокируется навсегда. В select такая ветка никогда не готова и может использоваться для временного отключения канала.

Подробный разбор

Ответ с пояснениями

Чтение из nil-канала допустимо синтаксически, но блокируется навсегда. В select такая ветка никогда не готова и может использоваться для временного отключения канала.

var ch chan int
select {
case <-ch:
    // Не выполнится, пока ch равен nil.
default:
    // Выполнится сразу.
}

Это отличается от закрытого канала: из закрытого после опустошения буфера сразу читается нулевое значение с ok=false. Без другой готовой ветки select будет ждать; если ждать больше нечего во всей программе, runtime может сообщить deadlock.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее