Каналы каналов в Go

Канал представляет собой первоклассное значение, которое можно аллоцировать и передавать куда угодно по аналогии с любым другим значением. Возможность использовать каналы -- одно из важных свойств языка программирования Go. К примеру, это свойство применяется при реализации безопасного параллельного демультиплексирования.

Рассмотрим следующий код:

Handle -- идеализированный обработчик для запроса, однако не определен тип, который он обрабатывает. Если же данный тип включает в себя канал, по которому можно отвечать, тогда каждый клиент сможет предоставить свой путь для ответа. Ниже -- схематическое определение типа Request:

Итак, клиент предоставляет функцию с аргументами, плюс канал внутри объекта запроса, по которому возможно получить ответ.

При этом на стороне сервера функция обработчика (handle function) будет единственным, что меняется.

Да, чтобы сделать данный пример более реалистичным, нужно еще многое выполнить, однако сам по себе код -- основа для параллельной неблокирующей RPC системы при ограниченной скорости пропуска сообщений, причем здесь нет и следа мьютекса.

По материалам https://golang-blog.blogspot.com/.