Почему веб-разработка на Go приятнее чем на PHP

Для кого я пишу? Для тех кто пишет на php (возможно также python, ruby) и слышал про Go, но ещё не решился его изучить детальнее. Я приведу доводы почему стоит изучать этот язык программирования и почему за ним будущее в веб-разработке.

Я пишу на php около 12 лет и это превосходный язык программирования, на нем написано 90% сайтов всего интернета. Почти каждая популярная CMS написана на PHP.
Почему же я перешел (вернее перехожу) на Go?

Многопоточность


В принципе здесь всё понятно. Многопоточность даёт колоссальные преимущества языку программирования. В Go многопоточность реализована очень просто и выразительно. В следующем пункте раскрою преимущества затрагивающие разработку сайта.

Окружение


Что мне нужно чтобы поднять обычный сайт на php?

Сервер на Linux, установить Nginx, иногда и Apache, поставить PHP, расширения, базу данных, Memcache, настроить Cron. Чтобы не было мучительно больно обслуживать сервер ставлю все в Docker. Вот так выглядит мой обычный Docker проект на PHP.



Знакомо?

Что нужно чтобы поднять обычный сайт на Go?

Сервер на Linux и установить Go. Всё. Круто? Так происходит потому что Go многопоточный и любой функционал можно вынести в отдельный поток, например веб-сервер, микро-сервисы, очереди, крон и т.п. Многие вещи уже реализованы в базовых пакетах.

Как же у меня выглядит Docker проект для Go? По сути его вообще нету. Я кладу Docker файлы прямо в папку с кодом сайта или сервиса. Если сайт имеет дополнительные микро-сервисы (например для работы с очередями) то в папку с этим сервисом кладется свой Dockerfile.



Порог вхождения


Выучить язык Go очень просто. Всю документацию можно пролистать за пару часов и понять принцип работы языка без углублений. Я думаю у Go самая короткая документация из популярных компилируемых языков.

На официальном сайте можно пройти тур по изучению, который раскроет все аспекты языка.

Углубить свои теоретические знания до профи можно за очень короткое время. Рекомендую курсы от Mail.ru на YouTube.

Читаемость кода


Было ли у вас такое, что вы открываете чужой код, модуль, плагин и т.п. и понимаете, что ничего не понимаете. И чтобы разобраться в тонкостях нужно как минимум с дебагом пройтись по основному коду.

В Go в большинстве случаев открывая какой-нибудь лютый код на 200 файлов и каждый файл полотенце кода, удивляешься тому что ты его способен понять слёту.

IDE


Писать в IDE JetBrains под PHP и под Go — это совершенно разные вещи. Автодополнение работает всегда и везде (99% случаев). Провалится можно в любой метод, в любой!

Тормозов нет совсем. Словами в общем это трудно описать, нужно попробовать. Когда вы начинаете полноценно писать в Goland то понимаете, что назад в PhpStorm уже не хотите возвращаться.

В позапрошлом году на хайлод я спрашивал у Дмитрия Стогова о планах по внедрению в PHP «нативной» многопоточности и похоже, что мы её не увидим, а жаль.

Отладка и тестирование


Многие разработчики PHP вообще не пользуются отладкой из-за того, что его нужно отдельно ставить как расширение, также нужно правильно настроить и многие просто не заморачиваются и пользуются выводом на страницу. В Go же дебаг встроен, по сути можно и не разбираться как он работает внутри, если вы пользуетесь IDE просто ставите точку остановки и запускаете программу.

С тестированием дела обстоят примерно также, не нужно подключать целый фреймворк к проекту, оно уже встроено в базовые пакеты и IDE.

Производительность


Go по скорости исполнения и потребления памяти намного превосходит PHP. Конечно их сравнивать не правильно, так как Go компилируемый язык. Хорошая статья по сравнению производительности есть на Хабре. К примеру у меня миркосервис в полном Docker окружении, который раньше занимал 100-200 мб оперативной памяти, перейдя на Go занимает 1-2 мб. Прирост скорости в 2-5 раз.

Итог


Я люблю PHP и буду продолжать на нем писать по мере необходимости, но Go стал для меня продолжением развития и если бы я переписал PHP с нуля, он бы стал языком Go.
Tags:
php, go, python, microservices, web-разработка, docker

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.