На собеседованиях почти всегда спрашивают одну или несколько, так называемых, аксиом работы с каналом. Для начала представим их в виде таблицы, а потом рассмотрим каждую на примерах: 1. Отправка в канал или получение из канала блокирует горутину Если отправить данные в канал, и нет другой горутины, готовой принять эти данные, то горутина заблокируется. Точно так же, если попытаться получить данные из канала и в нем нет данных, то получим deadlock (взаимную блокировку). Это позволяет организовать естественную синхронизацию между горутинами: 2. Отправка в nil канал и получение из nil канала блокируется навсегда zero-value для каналов — это nil. Если отправить значение в nil канал, то горутина будет заблокирована навсегда, так как никогда не будет другой горутины, которая могла бы прочитать из этого канала. Тоже самое для чтения из nil-канала: Отсюда вытекает особенность работы с nil каналами через select . Если есть select, в котором одна из ветвей пытается отправить или получить из nil