20 апреля 2021

🕸 Golang для веб-разработки: примеры использования

Более 7 лет работы в IT-сфере. Системное администрирование, frontend разработка, написание скриптов на Python.
Разбираем преимущества и недостатки языка Go для веб-разработки и рассказываем о написанных на нем (и для него) приложениях, библиотеках и фреймворках, которые можно использовать в собственных проектах.
🕸 Golang для веб-разработки: примеры использования

Go особенности и немного истории

Go (Golang) представляет собой компилируемый, многопоточный, статически типизированный язык. Он был разработан командой Google в 2007 году для улучшения производительности высоконагруженных серверных приложений.

Первоначально к языку предъявлялись следующие требования:

  • Он должен работать в большом масштабе для программ с большим количеством зависимостей.
  • Он должен быть понятен знакомым с C программистам. Многие разработчики Google хорошо владели процедурными языками из семейства C. Необходимость быстро обучить специалистов требовала, чтобы Go не имел радикальных отличий от них.
  • Он должен быть современным. C, C++ и в некоторой степени Java – довольно старые. Они были разработаны до появления многоядерных машин, сетей и веб-приложений. Особенности современного мира требуют внедрять новые подходы вроде встроенной конкурентности.

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

🕸 Golang для веб-разработки: примеры использования

Преимущества

  • Высокая скорость. Go быстро компилирует проекты и может применяться даже для редактирования кода прямо в интернете.
  • Совместимость с C. Это позволяет использовать многочисленные библиотеки, созданные для одного из самых распространенных языков.
  • Широкие возможности из коробки. Расширенная стандартная библиотека охватывает множество областей. В Go есть полностью рабочий веб-сервер и многое другое.
  • Документация как стандартная функция. Программисты могут легко документировать код и генерировать удобочитаемые данные прямо из комментариев.
  • Сборка мусора (автоматическое управление памятью) – ключевая функция языка Go. Он дает контроль над распределением памяти и упрощает оптимизацию приложений.
  • Масштабируемость и конкурентность. По мере развития приложений и сервисов приходится одновременно решать множество мелких задач, вроде доставки HTML в отдельные веб-браузеры. Go имеет множество встроенных функций, связанных с конкурентностью: в первую очередь goroutines и каналы. Goroutines – функции, которые выполняются одновременно с другими. Каналы позволяют различным goroutines взаимодействовать друг с другом.

Подробнее о возможностях Golang вы можете узнать из этой статьи.

Недостатки

  • Отсутствие параметрического полиморфизма для универсального программирования приводит к дублированию кода или небезопасным преобразованиям типов.
  • Нулевой интерфейс не равен интерфейсу нулевого объекта, что в сочетании с отсутствием алгебраических типов приводит к трудностям при обработке сбоев и базовых случаев.
  • Go не допускает появления открывающей скобки на отдельной строке, что заставляет программистов использовать один и тот же стиль скобок.
  • Семантика файлов в стандартной библиотеке Go в значительной степени основана на семантике POSIX и они плохо отображаются на платформе Windows.
Рекомендуем также ознакомиться самыми распространенными подводными камнями Go, а также сравнением Python и Golang по различным характеристикам.

Примеры использования Go

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

Аутентификация

  • Authboss – модульная система, которая позволяет добавить в приложение функции аутентификации и авторизации.
  • Casbin – библиотека авторизации, поддерживающая модели контроля доступа, включая ACL, RBAC и ABAC.
  • Go-email-normalizer – библиотека Go для обеспечения канонического представления адреса электронной почты.
  • Go-Guardian – эта библиотека обеспечивает простой, понятный и идиоматический способ создания современного API и веб-аутентификации. Она поддерживает LDAP, базовую аутентификацию, токен-носитель и аутентификацию на основе сертификатов.
  • Go-oauth2-server – автономный сервер OAuth2, написанный на Golang и соответствующий спецификациям.
  • Permissions2 – библиотека для отслеживания пользователей, состояний входа и разрешений. Использует безопасные файлы cookie и bcrypt.
🕸 Golang для веб-разработки: примеры использования

Боты

  • Ephemeral-roles – бот Discord для управления эфемерными ролями на основе присутствия участника голосового канала.
  • Go-chat-bot – бот для IRC, Slack и Telegram, написанный на Go.
  • Go-tgbot – оболочка API-интерфейса Pure Golang Telegram Bot, созданная из файла swagger, сеансового маршрутизатора и промежуточного программного обеспечения.
  • Hanu – фреймворк для написания ботов Slack.
  • Slack-bot – готовый к использованию Slack Bot для ленивых разработчиков: пользовательские команды, Jenkins, Jira, Bitbucket, Github.
  • Tenyks – сервис-ориентированный IRC-бот, использующий Redis и JSON для обмена сообщениями.

Базы данных

  • Bbolt – встроенная база ключей/значений для Go.
  • Bcache – согласованная библиотека Go для распределенного кэша в памяти.
  • Bitcask – это встраиваемая, постоянная и быстрая база данных типа ключ-значение (KV), написанная на чистом Go. Отличается предсказуемой производительностью чтения/записи, низкой задержкой и высокой пропускной способностью благодаря расположению битовой маски на диске (LSM + WAL).
  • CovenantSQL – база данных SQL на блокчейне.
  • Databunker – служба хранения личной информации, созданная в соответствии с GDPR и CCPA.
  • Hare – простая система управления базой данных, в которой каждая таблица хранится в виде текстового файла JSON с разделителями-строками.
  • Ledisdb – высокопроизводительный NoSQL, подобный Redis и основанный на LevelDB.
  • Rqlite – легкая распределенная реляционная база данных, построенная на SQLite.
  • Go-mysql – набор инструментов Go для обработки протокола MySQL и репликации.
  • Kingshard – высокопроизводительный прокси для MySQL на базе Golang.
  • Pg_timetable – расширенное планирование для PostgreSQL.

DNS

  • DNS – библиотека Go для работы с DNS.
  • Go-powerdns – привязки API PowerDNS для Golang.
  • Mdns – простая клиент-серверная библиотека mDNS (Multicast DNS) для Golang.
  • DDNS – персональный клиент DDNS с DNS Digital Ocean Networking в качестве серверной части.
  • Dyndns – процесс Background Go для регулярной автоматической проверки IP-адреса и внесения обновлений в одну или несколько динамических записей DNS для доменов Google при каждом изменении.
  • GoDNS – написанный на Go клиентский инструмент динамического DNS, поддерживающий DNSPod и HE.net.

Почта

  • Chasquid – SMTP-сервер, написанный на Go.
  • Email – надежная и гибкая библиотека электронной почты для Go.
  • Go-dkim – библиотека DKIM для подписания и проверки электронной почты.
  • Go-imap – библиотека IMAP для клиентов и серверов.
  • Go-simple-mail – очень простой пакет для отправки электронных писем с SMTP Keep Alive и двумя таймаутами: Connect и Send.
  • Hectane – легкий SMTP-клиент, предоставляющий HTTP API.
  • MailHog – тестирование электронной почты и SMTP с веб-интерфейсом и интерфейсом API.

Формы

  • Binding – связывает форму и данные JSON из запроса net/http со структурой.
  • Form – декодирует url.Values ​​в значения Go и кодирует значения Go в url.Values. Поддержка Dual Array и Full map.
  • Forms – не зависящая от платформы библиотека для анализа и проверки данных форм, которая поддерживает составные формы и файлы.
  • Qs – модуль Go для кодирования структур в параметры URL.

Веб GUI

  • App – пакет для создания приложений с GO, HTML и CSS. Поддерживает MacOS (поддержка Windows в процессе разработки).
  • Go-sciter – встраиваемый движок HTML/CSS/скриптов для разработки пользовательского интерфейса современного рабочего стола.
  • Webview – кроссплатформенное окно веб-просмотра с простыми двусторонними привязками JavaScript (Windows/macOS/Linux).
🕸 Golang для веб-разработки: примеры использования

Обмен сообщениями

  • Asynq – простая, надежная и эффективная распределенная очередь задач для Go, построенная на основе Redis.
  • Beaver – сервер обмена сообщениями в реальном времени для создания масштабируемых уведомлений в приложениях, многопользовательских игр, приложений чата в браузере и программах для мобильных устройств.
  • Confluent-kafka-go – клиент Golang от Confluent для Apache Kafka и платформы Confluent.
  • Drone-line – отправка уведомлений Line с использованием двоичного кода, докера или Drone CI.
  • Glue – надежная библиотека сокетов Go и Javascript.
  • Gorush – сервер push-уведомлений с использованием APNs2 и google GCM.
  • Jazz – простой уровень абстракции RabbitMQ для администрирования очередей, публикации и использования сообщений.

Сети

  • DHCP6 – реализует сервер DHCPv6, как описано в RFC 3315.
  • Fortio – библиотека нагрузочного тестирования и инструмент командной строки, расширенный эхо-сервер и веб-интерфейс. Позволяет указать заданную посекундную нагрузку и записать гистограммы задержки, а также другую полезную статистику и построить график. Поддерживает TCP, HTTP и gRPC.
  • Ftpserverlib – полнофункциональная библиотека FTP-сервера.
  • Gmqtt – гибкая, высокопроизводительная библиотека брокера MQTT, которая полностью реализует протокол MQTT V3.1.1.
  • Go-stun – реализация клиента STUN (RFC 3489 и RFC 5389).
  • Goshark – использует tshark для декодирования IP-пакета и создания структуры данных для его анализа.
  • Gosnmp – собственная библиотека Go для работы с SNMP.

HTTP-клиенты

  • Heimdall – усовершенствованный HTTP-клиент с возможностями повтора и hystrix.
  • Resty – простой HTTP- и REST-клиент для Go, вдохновленный Ruby rest-client.
  • Sling – клиентская библиотека Go HTTP для создания и отправки запросов API.

Серверные приложения

  • Algernon – веб-сервер HTTP/2 со встроенной поддержкой Lua, Markdown, GCSS и Amber.
  • Fider – открытая платформа для сбора и систематизации отзывов клиентов.
  • Jackal – XMPP-сервер, написанный на Go.
  • RoadRunner – высокопроизводительный сервер приложений PHP, балансировщик нагрузки и менеджер процессов.

Тестирование

  • Failpoint – реализация точек отказа для Golang.
  • Rod – драйвер Devtools для упрощения веб-автоматизации и парсинга.
  • Testsql – генерирует тестовые данные из файлов SQL перед тестированием и очищает их после завершения.
  • Testfixtures – помощник для Rails-подобных тестовых инструментов, предназначенных для тестирования приложений баз данных.
  • Restit – микро-фреймворк для написания интеграционного теста RESTful API.
  • Assert – базовая библиотека утверждений, используемая вместе с собственным тестированием Go.

Сторонние API

  • Airtable – клиентская библиотека Go для API Airtable.
  • Anaconda – клиентская библиотека Go для API Twitter 1.1.
  • Aws-sdk-go – официальный SDK AWS для языка программирования Go.
  • Discordgo – привязки Go для Discord Chat API.
  • Ethrpc – привязки Go для Ethereum JSON RPC API.
  • Gami – библиотека Go для интерфейса Asterisk Manager.
  • Geo-golang – библиотека Go для доступа к Google Maps, MapQuest, Nominatim, OpenCage, Bing, Mapbox и API геокодирования, а также обратного геокодирования OpenStreetMap.
  • Github – библиотека Go для доступа к GitHub REST API v3.
  • Medium – SDK Golang для API OAuth2 Medium.
  • Patreon-go – библиотека Go для Patreon API.

Веб-фреймворки

  • Aero – высокопроизводительный веб-фреймворк для Go, который набирает высшие баллы в Lighthouse.
  • Banjo – очень простой и быстрый веб-фреймворк для Go.
  • Fiber – веб-фреймворк, вдохновленный Express.js и построенный на Fasthttp.
  • Flamingo Commerce – предоставление функций электронной коммерции с использованием чистой архитектуры (вроде DDD), а также портов и адаптеров, которые можно использовать для создания гибких приложений.
  • Gizmo – набор микросервисных, используемый New York Times.
  • Goyave – полнофункциональная инфраструктура REST API, нацеленная на чистый код и быструю разработку.
  • Microservice – фреймворк для создания микросервисов.
  • Rex – библиотека для модульной разработки, основанная на gorilla/mux и полностью совместимая с net/http.
  • WebGo – микро-фреймворк для создания веб-приложений

WebAssembly

  • Dom – библиотека DOM.
  • Go-canvas – библиотека для использования HTML5 Canvas в коде go.
  • Tinygo – компилятор Go: микроконтроллеры, WebAssembly и инструменты командной строки на основе LLVM.
  • Vert – взаимодействие между значениями Go и JS.
  • Wasmbrowsertest – запускает тесты Go WASM в вашем браузере.
  • Webapi – привязки для DOM и HTML, созданные из WebIDL.
***

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

Алгоритмы и структуры данных действительно непростая тема для самостоятельного изучения: не у кого спросить и что-то уточнить. Поэтому мы запустили курс «Алгоритмы и структуры данных», на котором в формате еженедельных вебинаров вы:

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

Курс подходит как junior, так и middle-разработчикам.

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик С#
от 200000 RUB до 400000 RUB
Go-разработчик
по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ