Каналы обмена данными
Общий вид взаимодействия через канал
Замечания
Действуют по принципу FIFO
Создание канала
Создать канал можно с помощью функции make
и объявляются конструкцией chan Тип
:
Если буфер заполнен, нельзя будет писать в канал, пока не будет извлечен хотя бы один элемент (по умолчанию размер буфера - 0). Канал, в котором буфер имеет нулевой размер, может использоваться для отправки значений, только когда на другом конце канала ожидается прием данных. (Эффекта неблокирующих каналов можно добиться с помощью инструкции select
)
Обычно каналы создаются для обеспечения обмена данными между go-подпрограммами. Блокирующее поведение каналов можно использовать для синхронизации.
Закрытие канала
Закрыть канал может только sender, не receiver. Отправка данных в закрытый канал вызовет panic. Каналы работают не так, как файлы: их не обязательно закрывать. Закрывайте, если вам необходимо сообщить получателю, что данных больше не будет (например в цикле через range).
Пример:
Пример
select
Оператор select
позволяет горутине ожидать выполнения нескольких коммуникационных операций.
select
блокируется до тех пор, пока не будет запущен один из его вариантов, а затем он выполнит этот case
. Он выбирает один случайным образом, если готовы несколько.
Подробнее про этот statement см в разделе Процедурное программированее / Ветвления
.
Last updated