Шаблоны разработки Go
3 разных способа использования функций в качестве значений в Go
Получите некоторые функциональные приемы в наших проектах Go
Go — статически типизированный компилируемый язык. Это похоже на любой другой язык со статической типизацией, но с меньшими усилиями и очень просто. Когда дело доходит до функционального стиля программирования, он не страдает таким многословием, как Java.
С помощью того факта, что функции являются гражданами первого класса, как и любые другие значения, и того факта, что Go поддерживает утиную типизацию, мы можем легко писать в нем код в функциональном стиле.
Здесь, в этом посте, я расскажу о 3 способах кодирования в Go.
ПО промежуточного слоя
Из всех способов мне больше всего нравится этот — популярный шаблон обработчика. Давайте посмотрим на это в действии.
Ниже мы создаем наш обработчик для работы в приложении. Функция соответствует интерфейсу the http.Handler
:
Мы также создаем еще несколько промежуточных обработчиков/промежуточного программного обеспечения для решения сквозных проблем, таких как аутентификация и регистрация других работ:
Наконец, в основной функции мы создаем ultimateHandler
, которая будет выполняться после того, как все задачи, такие как ведение журнала и аутентификация, будут выполнены для каждого запроса. Для этого мы соединяем несколько обработчиков в строке 5:
По сути, когда мы создаем переменную с http.HandlerFunc
, мы создаем оболочку. Когда ему будет отправлена функция, она будет вызываться сама.
Динамическая функция
Это еще один шаблон, который я люблю использовать в своем коде, когда это возможно. Это может выглядеть как шаблон Java для создания функциональных классов или потокового API. Но мы также можем использовать этот стиль кодирования с минимальным объемом кода и меньшей сложностью:
Анализ
- В строке 8 мы определяем тип (
UnaryFunction
, функция, которая принимает 1 аргумент) функции, которая принимаетint
и возвращает другое целое число. Определив это, мы можем создать любой другой тип, который может соответствовать его структуре, а благодаря утиной типизации мы можем добиться динамической функции в Golang. - Строки 18 и 19 определяют две функции, соответствующие функции, определенной в строке 8, но с другой реализацией. Строка 18 реализует метод
square
, а строка 19 реализуетcubing
.
Общий код
Мы можем использовать замыкания, чтобы написать общий код на Golang. Рассмотрим этот код:
Давайте проанализируем:
- У нас есть две службы:
SubscriberDetailsService
иSubscribeEntitlementService
, которые возвращают типServiceCallback
. - Эти
ServiceCallbacks
можно обрабатывать отдельно или с помощью балансировщика нагрузки и планировщика заданий, например rio.
В нашем примере обратные вызовы службы могут быть вызваны в любом месте, но когда они вызываются, они дают родительскому объекту контроль над механизмом вызова, и, поскольку они имеют один и тот же тип (ServiceCallback
), их можно собирать, приоритезировать или сериализовать как разработчик хочет.
Вот и все. Спасибо за прочтение.
Мой очередной пост на Голанге