Шаг 64.
Язык программирования Go.
Каналы в языке Go

    На этом шаге продолжим знакомиться с инструкциями организации взаимодействий и параллельного выполнения в Go. Рассмотрим понятие канала.

    Очень редко бывают ситуации, когда достаточно запустить группу go-подпрограмм и дождаться их завершения, без необходимости организовывать взаимодействие между ними. Чаще go-подпрограммы должны действовать сообща, а добиться этого проще всего, обеспечив их возможностью взаимодействий. Ниже демонстрируются синтаксические конструкции, применяемые для отправки и приема данных:

канал <- значение // Блокирующая передача
<-канал // Прием данных и их уничтожение 
x := <-канал // Прием и сохранение данных 
x, ok := <-канал // Как и выше, полюс проверка - открыт ли канал и имеются ли данные

    Каналы создаются с помощью встроенной функции make():

make(chan Тип)
make(chan Тип, емкость)

    Если емкость буфера не указана, будет создан синхронный канал, то есть операция передачи данных будет блокироваться, пока принимающая сторона не будет готова принять их. Если емкость указана, будет создан асинхронный канал, обмен данными через который будет происходить без блокировки, при условии что в буфере достаточно места для отправляемых данных и при приеме в канале будут иметься данные.

    По умолчанию создаются двунаправленные каналы, но их можно сделать однонаправленными, например чтобы лучше выразить семантику, которую сможет воплотить компилятор.

    На следующем шаге рассмотрим пример, в которм реализуется функция, возвращающая канал, через который в ответ на запрос отправляется целое число.


Предыдущий шаг Содержание Следующий шаг