Python крут. Особенно Python 3 со своей асинхронностью. Но, честно говоря, Go не дает другим языкам никаких шансов выжить в мире энтерпрайза…
Если вы поняли основную мысль этой цитаты, вы скорее всего пробовали или смотрели на язык программирования Go, который на мой взгляд является самым простым языком, подходящим для разработки любого вида приложений. Да! Вы прочитали правильно, для меня Go даже легче в изучении, чем JavaScript. Полагаю, что это главная причина, по которой Go стал настолько популярным за несколько лет.
Итак, с чем мы работали до использования Go?
Мы работаем над веб-приложением, основанном на API, которое предоставляет пользователям некоторый аналитический функционал. В наш стэк технологий входило:
- React для фронтенда админки
- Django Python для бэкенда админки и для сервиса аутентификации
- Node.js для сервиса API
- PostgreSQL как СУБД и Cassandra для логирования
- Самописный контейнер зависимостей
Как вы видите, общая инфраструктура полностью основана на микро-сервисах, и большинство логики полностью разделено, причем используются разные технологии.
Это главная причина, почему мы начали задумываться о слиянии сервиса API и бэкенда в один проект, потому что в них есть много схожих вещей, а код дублируется в разных языках программирования и технологиях. Это избавляет от того, что нам нужно много работать над настройкой API сервисов Django, особенно над кастомными JSON-ответами.
После 1 месяца построения сервиса API на Django, я почувствовал, что Django весьма хорош, пока ты разрабатываешь что-то тривиальное, но когда ты хочешь больше производительности или создать свои модули, все становится сложнее и сложнее.
Почему Go?
Как я сказал ранее, язык Go — самый простой из всех языков программирования, которые я видел и с которыми я работал. Но для меня это было только первое впечатление.
Вот 5 основных причин, почему мы предпочитаем использование Go вместо Python Django
#1 Он компилируется в один бинарник
Go разработан как компилируемый язык. Разработчики Google проделали огромную работу для этого. Используя статичные ссылки он фактически комбинирует все зависимые библиотеки и модули в один единственный бинарный файл, основанный на типе ОС и архитектуре. Это значит, что если вы компилируете своё бэкенд-приложение на ноутбуке с Linux X86 CPU, вы можете просто загрузить скомпилированный бинарник на сервер, и он будет работать без необходимости установки зависимостей!
#2 Строгая система типизации
Система типизации переменных очень важна для больших расширяемых приложений. Python крутой язык, но иногда вы получаете необычные исключения, потому что пытаетесь использовать переменную как integer, но оказывается что это string.
Go даст вам знать о такого рода проблеме во время компиляции, посредством вывода ошибки. Вот где вы выигрываете время, не отвлекаясь на такие глупые проблемы.
#3 Производительность!!
Это может показаться удивительным, но в большистве случаев Go быстрее чем Python (2 и 3). Здесь приводятся результаты теста производительности, однако они не совсем справедливы, так как производительность зависит от типа приложения и случая его использования.
В нашем случае Go выполнился быстрее, благодаря своей модели параллельности и стабилизации CPU. Когда бы нам не пришлось работать с каким-то входящим запросом, мы делаем это отдельно с Goroutine, который потребляет в 10 раз меньше ресурсов, чем Python Threads. Таким образом мы сохранили много ресурсов (память, CPU) благодаря встроенным возможностям языка.
#4 Вам не нужен веб-фреймворк для Go
Это самая приятная вещь в языке программирования. Создатели Go и сообщество разработчиков имеют так много встроенных инструментов, поддерживаемых ядром языка, что в большинстве случаев вам в правду не нужна никакая сторонняя библиотека. Например, там есть http, json, шаблонизатор html, и вы можете разработать вполне сложные сервисы API, даже не задумываясь о том, чтобы поискать библиотеку на Github!
Но, конечно же, есть множество библиотек и фреймворков, разработанных для Go. Однако я бы рекомендовал вам разрабатывать ваше веб-приложение и API-сервис без сторонних библиотек, потому что в большинстве случаев они не делают вашу жизнь проще, чем при использовании нативных пакетов.
#5 Хорошая поддержка IDE и отладка
Поддержка IDE является одной из самых важных вещей, когда вы пытаетесь поменять язык программирования. Удобная IDE в среднем может сохранить до 80% времени написания кода. Я нашел Go плагин для JetBrains IDEA, который поддерживает Webstorm, PHPStorm и др. Этот плагин дает вам все что нужно для разработки проекта, вдобавок к мощности JetBrains IDEA, что вместе дает вам хорошую прокачку в вашей работе.
Судя по статистике нашего кода, после того, как мы переписали наши проекты на Go, мы получили на 64% меньше кода, чем было раньше.
Вам не нужно заниматься отладкой кода, который не существует. Меньше кода — меньше проблем!
Заключение
Go стал для нас единым языком для всех случаев использования, который дал большую гибкость. Мы получили около 30% прироста производительности на бэкенде и сервисах API. И теперь мы можем обрабатывать логи в реальном времени, заносить их в базу данных и запустить потоки с Websocket с одного или нескольких сервисов! Это отличный результат от возможностей языка Go.
Статью перевел aziev. Оригинал на Hackernoon.com доступен по ссылке.