Golang продолжает развиваться, вместе с ним развивается и вся экосистема языка. В частности, появляются новые и обновляются существующие фреймворки. В этой статье мы сделаем небольшой обзор тех, что связаны с HTTP-бэкендом.

Beego 

Если нужен быстрый запуск API-интерфейсов REST, веб- и серверных приложений в Go, то лучшего варианта не найти. Golang-разработчики зачастую сравнивают Beego с Django в Python. Достоинство Beego — отсутствие необходимости установки сторонних производителей. Это, фактически, полноценный фреймворк Model-View-Controller, причём у него есть собственные библиотеки и встроенный инструмент Bee, который даёт возможность находить изменения кода. 

Beego состоит из восьми модулей, каждый из которых можно либо использовать, либо  игнорировать. Благодаря карте объектных отношений ORM-фреймворк помогает организовать базу данных приложения вместе с инструментами обработки сеансов и системами регистрации.

Также Beego имеет обработчик кэша и все необходимые библиотеки для работы с элементами HTTP. Фреймворк отлично работает с  инструментами командной строки — примерно как Django.

Правда, есть и недостаток. Из-за возможностей и масштабности Beego, новичку будет нелегко его освоить, так что это, скорее, инструмент для опытного разработчика.

Kit 

Инструмент для работы с микросервисами в любом масштабе. Микросервисы часто требуют специализированной поддержки, которую Kit без проблем предоставляет.

Фреймворк обеспечивает безопасность RPC, наблюдаемость системы и интеграцию инфраструктуры. В его состав входит несколько связанных пакетов, которые служат для построения масштабных сервис-ориентированных архитектур (SOA), что облегчает работу с микросервисами.

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

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

Echo 

Облегчённый, гибкий и расширяемый веб-фреймворк. Позволяет создавать надёжные и масштабируемые RESTful API, имеет встроенное промежуточное ПО и даёт возможность определять своё собственное. 

В числе фичей Echo также оптимизированный HTTP-маршрутизатор, который разумно определяет приоритеты маршрутов, централизованная обработка ошибок HTTP и API для отправки различных HTTP-ответов. Фреймворк поддерживает HTTP/2 для повышения производительности и улучшения пользовательского опыта.

Fiber 

Простой но мощный фреймворк, который был создан на базе Fasthttp — самого быстрого HTTP-движка для Go. Fiber разработали для ускорения работы с нулевым распределением памяти и возможностями производительности. Плюс ко всему, этот фреймворк ещё и компактен, он без проблем позволяет интегрировать сторонние библиотеки с Martini. Fiber обеспечивает необходимую масштабируемость при сокращении накладных расходов.

По отзывам некоторых разработчиков, он напоминает Express.js, предоставляя отличную поддержку маршрутизации, обслуживания статических файлов, построения REST API, движок шаблонов и поддержку гибкого межплатформенного ПО.

Fasthttp 

Fasthttp обеспечивает быстрый HTTP-сервер и клиент API. Он может обрабатывать более 100 000 запросов в секунду и свыше 1 млн одновременно открытых соединений. Фреймворк рассчитан на относительно низкое потребление памяти и обеспечивает простую поддержку обновления соединения через RequestCtx.Hijack.

Разработали Fasthttp для расширения возможностей клиент-серверных реализаций либо написания их с нуля. Обработчик запросов получает достаточно много информации, включая адрес сервера и клиента, регистратор запросов, уникальный идентификатор запроса и т. п.

Стоит знать, что Fasthttp несовместим с net/http.

Gorilla  

Gorilla практически безупречно работает со всеми повторно используемыми элементами и компонентами HTTP-библиотеки. Её главные достоинства в том, что она предлагает модульность и масштабируемость в качестве основных функций. И проблемы «засорения» устаревшим функционалом в случае Gorilla нет — всё отлично спроектировано.

Пакет Gorilla WebSocket предоставляет полную реализацию протокола WebSocket. Благодаря простоте использования и возможностям у этого фреймворка есть все шансы стать одним из наиболее заметных для Golang.

Тема фрейворков в Golang достаточно сложная. Единого промышленного стандарта пока нет, явного лидера среди написанных сообществом фреймворков — тоже. Мы перечислили наиболее популярные на данный момент варианты, которые могут помочь с разными задачами. Расскажите, а что используете вы?

Комментарии (13)


  1. vitalyisaev2
    05.07.2022 12:00
    +1

    Одного меня смущает дисклеймер "The Gorilla Toolkit is looking for a new maintainer" ?


    1. quadcode_team Автор
      05.07.2022 12:38

      Не вас одного, конечно, отчасти поэтому Gorilla последняя в списке.

      В последний месяц в issue появились несколько человек, которые, кажется, готовы выделять на Gorilla время. Надеемся, что проект будет жить. Но, сожалению, мало какой open source полностью застрахован от сценария, когда у главного контрибьютора нет свободного времени или мотивации продолжать :С


  1. kulaginds
    05.07.2022 16:53
    +2

    А как же https://github.com/go-kratos/kratos ?


    1. YekitKsv
      06.07.2022 09:44
      +1

      Для меня это топ среди всех фреймворков. Без лишнего геморроя, простой и гибкий. Из коробки все для запуска есть


  1. gohrytt
    05.07.2022 17:07

    Из всех предложенных самое адекватное - файбер, прямо приятно работать, но, конечно, фастхттп


    1. Macbet
      06.07.2022 00:39

      а в чем заключается проблема fasthttp ?


      1. kostyaBro
        06.07.2022 08:36

        Много подводных камней в угоду оптимизации. К примеру нельзя возвращать body, ну либо делай его копию. Надо не забывать release request и response, а то в один прекрасный момент не сможешь обработать запрос.


      1. gohrytt
        07.07.2022 10:50

        Нет проблем, просто специфичная штука и не дружит с обработчиками написанными под стдлиб


    1. formerchild
      06.07.2022 09:43

      Спасибо, попробую файбер как-нибудь. А что с fasthttp?

      (мне то самому не хватает в нём как раз поддержки gorilla в основном, портирую кусочки иногда)


  1. Chebaa
    06.07.2022 09:44
    +1

    Gin один из самых популярных, но его нет в списке.


  1. zeroart
    06.07.2022 10:15
    +1

    Странная статья. Откровенно бесполезная. Все эти фреймворки можно найти на go-awesome или на подобных ресурсах. Куда интереснее обзор или опыт использования с описанием плюсов и минусов, каких-то фишек, хаков и т.д. Расскажите, а что используете вы? Встречный вопрос. А вы расскажите с какой целью написали и опубликовали данную статью? Кроме hr- и маркетинговых целей :-)


    1. quadcode_team Автор
      06.07.2022 10:36
      -1

      Добрый день! Вы правы, что все фреймворки можно найти на многих других ресурсах. Причина появления статьи в том, что вопросы о том, что использовать, тоже периодически появляются в разных местах. Поэтому мы подумали, что обзор может быть полезен для начинающих. Видим, что были не совсем правы, спасибо вам за клёвую обратную связь!

      Мы сами сейчас идём по пути написание своего фреймворка с учётом особенностей нашей инфраструктуры и требований. Когда-нибудь про это расскажем отдельно.


  1. rexus228
    06.07.2022 10:15
    -1

    И тут gin такой: "Ну да, ну да - пошел я нах@й" :)