Golang: почему стоит выбрать это направление
Привет! Я — Тарас Серегин, Golang Engineering Leader в NIX.
Ежегодно на рынок выводят сотни IT-продуктов. Со временем у пользователей появляются новые запросы: изменить интерфейс, ускорить, оптимизировать приложение и так далее. Чтобы исправить баги и улучшить систему, разработчики ищут наиболее эффективное для клиента и наименее трудоемкое для себя решение.
В поиске удобных инструментов для работы в вебе инженеры Google в 2007 году задумались о более простой версии С и С++. Идею успешно реализовали в виде Golang — компилируемого многопоточного языка программирования. Планировалось, что он будет использоваться только под задачи Google (производное от Google language). Но вскоре инженеры поделились наработками со всем комьюнити.
В этой колонке я хочу рассказать о пользе применения Golang и чем направление привлекает бэкенд-разработчиков.
Популярные среди всех программистов приложения Docker и Kubernetes написаны на Go. Бэкенд мобильной версии Uber тоже. Кстати, девелоперы компании одними из первых придумали стандарт оформления и ведения кода Golang. Преуспел Go и в области блокчейна. Hyperledger Fabric — платформа для реализации блокчейн-проектов — также активно его использует. Этот список можно еще долго продолжать, но красноречивее выглядит мировая статистика.
По данным Stack Overflow, Golang входит в топ-3 языков, на котором программисты хотели бы писать код. Лидируют Python и JavaScript. В майском рейтинге PopularitY of Programming Language Golang на
Golang прост в изучении
Авторы Golang стремились сделать его не перегруженным. От этого язык выглядит более дружественным для новичков — порог входа в него низкий. Даже те, кто относительно недавно освоил Java, C, C++ или Python, быстро поймут и привыкнут к синтаксису Go. У него нет классов, поддержки наследования, исключений и аннотаций, что упрощает изменение кода. А с помощью утилиты GoDoc удобно документировать код.
Языку уже более десяти лет. Массивы опенсорс-кода и библиотек уже реализованы для Go, а результаты доступны на GitHub. Поэтому для многих задач можно найти готовое решение. Есть различные интеграции, а стандартная библиотека Go включает много полезных инструментов, в том числе веб-сервер и пакет тестирования, чего нет во многих языках «из коробки».
Эффективность Go — быстрый в компиляции и выполнении команд
Go компилируется гораздо быстрее, чем его аналоги С/С++. Одно из преимуществ — то, что он компилируется в бинарные файлы, и виртуальная машина не нужна (как в Java, например). Мы работаем с кроссплатформенным языком, то есть разрабатываем для любой платформы: Windows, Linux, MacOS. Просто компилируем и сразу запускаем.
Golang — один из самых быстрых и эффективных языков программирования. То, как он справляется с любой нагрузкой, не сравнимо с возможностями интерпретируемых языков вроде РНР, Node.js, Ruby и другими.
В Java или С# вы могли встретить такой термин, как многопоточность. Этот механизм призван задействовать все ресурсы компьютера, на котором запускается программа, чтобы решать трудоемкие задачи максимально эффективно и быстро. Например, перелопачивание больших объемов данных в нескольких потоках или рассылка огромного количества писем. Достигается это с помощью встроенных примитивов — горутин (threads). Создать такую процедуру в Go просто: добавляем ключевое слово go перед функцией.
Горутины очень легковесны. Если сравнивать с потоками Java, который потребляет много оперативной памяти, Go требуются буквально мегабайты. Он является достаточно щадящим для ресурсов системы. Среда выполнения Golang позволяет одновременно запускать тысячи горутин. При этом обслуживание инфраструктуры обойдется недорого. Переплачивать за хостинг не придется.
Легок в интеграции с текущим бэкендом
Полностью переписывать на Go действующий проект, на которым вы работаете, бизнесу может быть дорого и долго. Есть решение — интегрировать в текущий проект Go-бэкенд. Например, есть большое приложение на РНР. Мы можем дополнить его новыми сервисами на Go, и они будут отлично уживаться вместе. То же самое касается интеграции с Java, Python и другими бэкенд языками. Еще один плюс — на Go есть множество библиотек для интеграции: PostgreSQL, MySQL, RabbitMQ, Redis, GraphQL и другие.
Удобен для реализации микросервисной архитектуры
Сегодня в больших проектах очень популярен подход микросервисной архитектуры. Почему? Современные приложения содержат большое количество внешних сервисов: базы данных, кеши, поисковые движки, очереди сообщений и так далее. Разработчики смотрят в будущее и разбирают сложные проекты на более мелкие, закрывающие конкретные запросы бизнеса. Одни конечные продукты клиент может предоставлять определенным пользователям, другие — перепродавать сторонним компаниям. Go отлично подходит для последующих разработок. В нем используется асинхронный ввод/вывод, поэтому приложение может взаимодействовать с любым количеством сервисов, не блокируя веб-запросы. Протоколы gRPC позволяют микросервисам беспрепятственно общаться между собой.
Широкие возможности применения
Язык обладает встроенными возможностями (concurrency) многопоточности для обработки больших объемов данных. Например, для email-рассылок и нотификаций. Все, что касается в этом плане web-сервисов, легко реализовать на Go:
- системы потокового видео/аудио (чаты, стриминговые сервисы);
- высоконагруженные API;
- парсеры с большими объемами данных (XML, JSON, CSV);
- system apps (системные кроссплатформенные приложения, которые можно запускать на разных операционных системах);
- serverless web services (AWS Lambda, Google cloud functions for Firebase);
- notification services.
А где Golang лучше не применять? В открытых источниках вы можете найти библиотеки для реализации GUI-интерфейса на Go. Но, на мой взгляд, Desktop GUI приложения лучше на нем не писать. Все-таки язык создавался для решения задач в вебе. Такие же сомнительные «поделки» попадаются на GitHub в сферах геймдева и мобильной разработки.
Опыт нашей команды
Мы в NIX пишем на Golang с 2019 года. На данный момент в команде порядка 20 человек с экспертизой в этом языке. За два года мы успешно реализовали около десяти проектов на Go. Среди них — разработки в таких доменах, как fintech, real estate, высоконагруженный сервис по обработке видео, спортивные новости и другие.
Почему выбрали Go? Например, в проекте с онлайн-банкингом мы имели дело с сотнями тысяч пользовательских транзакций. В приложении для обработки видео — с сервисом, который должен был запускаться на Windows, так как был задействован вспомогательный софт и «железо» под эту платформу. В сервисе спортивных новостей — тысячи онлайн-юзеров, real time данные и высокие требования по скорости доставки контента на фронтенд. Во всех случаях нам пригодились ключевые возможности языка — concurrency и кроссплатформенность. Словом, везде, где мы использовали Go по назначению, имеем только положительный опыт.
Как и в любом бизнесе, в IT время на разработку — это деньги. Заказчики не хотят терять ни того ни другого. Поэтому команде важно оперативно решать технические таски. Современному бэкенд-разработчику нужно владеть как минимум одним языком, на котором быстро решаются бизнес-задачи. Golang отлично для этого подходит. При необходимости некоторые участки приложения вы сможете выносить в микросервисы на Go. При грамотном проектировании сочетание Golang с другими бэкенд-языками дает потрясающие результаты — конкурентный продукт и довольного клиента.
156 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів