Разбираем преимущества и недостатки языка Go для веб-разработки и рассказываем о написанных на нем (и для него) приложениях, библиотеках и фреймворках, которые можно использовать в собственных проектах. Обсудить
Go особенности и немного истории Go (Golang) представляет собой компилируемый, многопоточный, статически типизированный язык. Он был разработан командой Google в 2007 году для улучшения производительности высоконагруженных серверных приложений.
Первоначально к языку предъявлялись следующие требования:
Он должен работать в большом масштабе для программ с большим количеством зависимостей. Он должен быть понятен знакомым с C программистам. Многие разработчики Google хорошо владели процедурными языками из семейства C. Необходимость быстро обучить специалистов требовала, чтобы Go не имел радикальных отличий от них. Он должен быть современным. C, C++ и в некоторой степени Java – довольно старые. Они были разработаны до появления многоядерных машин, сетей и веб-приложений. Особенности современного мира требуют внедрять новые подходы вроде встроенного параллелизма. Go – отличный вариант для создания простых, но эффективных веб-сервисов. Разберем вкратце основные плюсы и минусы этого языка для веб-разработки.
Преимущества Высокая скорость. 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.
Боты 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).
Обмен сообщениями 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. Заключение Наш далеко не полный список приложений, инструментов и библиотек призван проиллюстрировать возможности Golang для веб-разработки. Если вы решили освоить язык самостоятельно или улучшить свои знания, рекомендуем ознакомиться со списком из 30 лучших книг. Для более системного изучения стоит обратить внимание на курсы онлайн-академии GeekBrains. За 12 месяцев опытные преподаватели научат вас писать на Go высоконагруженные приложения и безопасные масштабируемые сервисы. График занятий (2 раза в неделю) идеально подходит не только для новичков, но для программистов, занимающихся еще одним языком в свободное время. Учебная программа ориентирована на практическую работу в команде, а успешно окончившие курс слушатели смогут добавить к портфолио 5 реализованных проектов и получат помощь в трудоустройстве.
Интересно, хочу попробовать