О фреймворке GoFr
GoFr — это фреймворк, написанный на языке Go и предназначенный для ускоренной разработки микросервисов. Согласно официальному сайту GoFr, ключевыми особенностями его являются:
- тестирование кода в реальных производственных средах;
- встроенные инструменты наблюдаемости, такие как URL-адреса проверки состояния и контрольного сигнала, позволяющие определять жизнеспособность и готовность к работе Kubernetes;
- трассировка, метрики и структурированные логи различного уровня для мониторинга приложения;
- поддержка множества различных источников данных, таких как mysql, postgres, kafka, google, mqtt и т. д.
Все это позволяет разработчику сосредоточиться на основной бизнес-логике, а приложению — быть готовым к производству с момента POC (proof-of-concept — подтверждения правильности концепции).
Возможности GoFr
Почему я выбрал GoFr вместо того, чтобы реализовать http-сервер самостоятельно или использовать другой фреймворк?
GoFr избавил от беспокойства по поводу согласованности приложения и позволил наблюдать за его работой, сосредоточившись на бизнес-логике. Оцените возможности этого фреймворка:
- REST-подход к архитектуре. GoFr обеспечивает соблюдение принципов REST (representational state transfer — передача репрезентативного состояния) благодаря хорошо организованной структуре, упрощающей проектирование API.
- Логирование. Встроенные функции логирования позволяют легко отслеживать входящие запросы.
- Метрики и трассировка. GoFr поддерживает беспрепятственную интеграцию метрик и трассировки, помогая контролировать производительность и отслеживать запросы.
- Конфигурация CORS. С помощью встроенных опций GoFr можно легко настраивать CORS (cross-origin resource sharing — совместное использование ресурсов между различными источниками).
- Динамический уровень регистрации данных. Удаленное изменение уровня регистрации данных без перезапуска приложения способствует повышению гибкости работы.
- Совместимость с Kubernetes. Встроенные конечные точки проверки состояния и контрольного сигнала поддерживают развертывание в Kubernetes.
- Интеграция баз данных. Встроенная поддержка популярных баз данных упрощает управление соединениями с необходимыми базами данных.
- Интеграция IoT. Встроенная поддержка сетевого протокола MQTT (message queuing telemetry transport — обмен сообщениями по шаблону “издатель-подписчик”) и подключение к HiveMQ (MQTT-брокеру) по умолчанию обеспечивают бесшовную интеграцию IoT (Internet of Things — интернет вещей).
А самым ценным в GoFr является то, что для регистрации маршрута требуется очень мало строк кода, хотя он выполняет множество других действий.
Таких возможностей нет ни в одном из популярных фреймворков, включая Gin, Echo, Beego, Fiber.
Пример регистрации маршрута
package main import "gofr.dev/pkg/gofr" func main() { // Создание нового приложения a := gofr.New() // Добавление маршрутов a.GET("/hello", func (c *gofr.Context) (interface{}, error) { return “Hello World”, nil }) // Запуск приложения a.Run() }
Всего три строки и одна первичная зависимость — и приложение Hello World готово к производству.

При обращении к конечной точке /hello
получаем следующий хорошо отформатированный ответ.

Проверка работоспособности и готовности Kubernetes
GoFr по умолчанию создает маршруты для проверки работоспособности и готовности, где в конечной точке /.well-known/health
проверяется статус всех источников данных и сервисов, подключенных к текущему сервису.

В конечной точке /.well-known/alive
проверяется, доступен ли текущий сервис.

Трассировка с помощью GoFr
Добавление конфигурации `TRACE_EXPORTER=gofr` в конфигурационный файл .env
позволяет включить трассировку и экспортировать трассы на tracer.gofr.dev.

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

Визуализация метрик
В каждом GoFr-приложении метрики, экспортируемые на порт 2121
через конечную точку /metrics
, можно визуализировать на Grafana с помощью дэшборда Grafana от GoFr.
Дэшборд с имитацией производственной системы.



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


Аналогичные графики доступны для различных систем PubSub, баз данных SQL и т. д.
Ошибки в GoFr
Вам просто нужно вернуть полученную ошибку, и GoFr по умолчанию форматирует ее в нижеуказанном формате.
Ошибка, возвращенная из MySQL, показана в следующем примере:
{ "error": { "message": "Error 1146 (42S02): Table 'test_db.EMPLOYEE' doesn't exist" } }
Заключение
При написании кода с использованием GoFr можно не беспокоиться о второстепенных вещах и сосредоточиться на основной бизнес-логике. GoFr не только обеспечивает повышенную производительность, но и позволяет контролировать работу приложения. Таких возможностей нет ни у одного другого фреймворка или Golang-пакета, используемого по умолчанию.
Читайте также:
- Автоматизация платежей со Stripe и Golang: руководство разработчика
- Как тестировать приложения Gofr?
- Лучшие практики для эффективного кода на Golang. Часть 1
Читайте нас в Telegram, VK и Дзен
Перевод статьи Aryan Mehrotra: Why use GoFr for Golang Backend?