Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpChNl 164 of 280 menu
◀ ▶

Пустой канал в Go

Объявление канала без создания дает нулевое значение типа. Такой канал не связан ни с какой очередью: и отправка, и прием в него блокируют ветку навсегда.

Это не то же самое, что закрытый канал: закрытый принимает прием с признаком конца, а нулевой просто ждет пару, которой не будет, пока не присвоят результат создания.

Сравним нулевой и рабочий канал в одной программе:

package main import "fmt" func main() { var empty chan int ok := make(chan int, 1) ok <- 1 fmt.Println(<-ok) _ = empty }

Прием из ok печатает 1. Строка с empty в комментарии напоминает: операция с ним остановила бы программу.

Иногда намеренно обнуляют переменную канала в ветке конструкции выбора, чтобы отключить одну из операций:

package main import "fmt" func main() { ch := make(chan int) var off chan int _ = ch _ = off fmt.Println("ready") }

Дан следующий код:

var ch chan int ch <- 1

Скажите, что произойдет на второй строке.

Дан следующий код:

var ch chan int v := <-ch

Скажите, дойдет ли присваивание в v до конца.

Скажите, чем нулевой канал отличается от закрытого пустого канала при приеме.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить