Go особенности и немного истории
Первоначально к языку предъявлялись следующие требования:
- Он должен работать в большом масштабе для программ с большим количеством зависимостей.
- Он должен быть понятен знакомым с C программистам. Многие разработчики Google хорошо владели процедурными языками из семейства C. Необходимость быстро обучить специалистов требовала, чтобы Go не имел радикальных отличий от них.
- Он должен быть современным. C, C++ и в некоторой степени Java – довольно старые. Они были разработаны до появления многоядерных машин, сетей и веб-приложений. Особенности современного мира требуют внедрять новые подходы вроде встроенной конкурентности.
Go – отличный вариант для создания простых, но эффективных веб-сервисов. Разберем вкратце основные плюсы и минусы этого языка для веб-разработки.
Преимущества
- Высокая скорость. Go быстро компилирует проекты и может применяться даже для редактирования кода прямо в интернете.
- Совместимость с C. Это позволяет использовать многочисленные библиотеки, созданные для одного из самых распространенных языков.
- Широкие возможности из коробки. Расширенная стандартная библиотека охватывает множество областей. В Go есть полностью рабочий веб-сервер и многое другое.
- Документация как стандартная функция. Программисты могут легко документировать код и генерировать удобочитаемые данные прямо из комментариев.
- Сборка мусора (автоматическое управление памятью) – ключевая функция языка Go. Он дает контроль над распределением памяти и упрощает оптимизацию приложений.
- Масштабируемость и конкурентность. По мере развития приложений и сервисов приходится одновременно решать множество мелких задач, вроде доставки HTML в отдельные веб-браузеры. Go имеет множество встроенных функций, связанных с конкурентностью: в первую очередь goroutines и каналы. Goroutines – функции, которые выполняются одновременно с другими. Каналы позволяют различным goroutines взаимодействовать друг с другом.
Подробнее о возможностях Golang вы можете узнать из этой статьи.
Недостатки
- Отсутствие параметрического полиморфизма для универсального программирования приводит к дублированию кода или небезопасным преобразованиям типов.
- Нулевой интерфейс не равен интерфейсу нулевого объекта, что в сочетании с отсутствием алгебраических типов приводит к трудностям при обработке сбоев и базовых случаев.
- Go не допускает появления открывающей скобки на отдельной строке, что заставляет программистов использовать один и тот же стиль скобок.
- Семантика файлов в стандартной библиотеке Go в значительной степени основана на семантике POSIX и они плохо отображаются на платформе Windows.
Примеры использования 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.
Хочу освоить алгоритмы и структуры данных, но сложно разобраться самостоятельно. Что делать?
Алгоритмы и структуры данных действительно непростая тема для самостоятельного изучения: не у кого спросить и что-то уточнить. Поэтому мы запустили курс «Алгоритмы и структуры данных», на котором в формате еженедельных вебинаров вы:
- изучите сленг, на котором говорят все разработчики независимо от языка программирования: язык алгоритмов и структур данных;
- научитесь применять алгоритмы и структуры данных при разработке программ;
- подготовитесь к техническому собеседованию и продвинутой разработке.
Курс подходит как junior, так и middle-разработчикам.
Комментарии