ХабрПостыНовостиМегапосты?

Почему Go?

На моих трансляциях лайв-кодинга постоянно всплывает этот вопрос. Проговаривал много раз, но если записать ответ, то дальше можно просто выдавать ссылку.

Кодить начал в 1995-ом на Delphi для автоматизации каталога компьютерных комплектующих. Я был успешным менеджером оптовых и дилерских продаж в системном интеграторе, но занимался любимым делом всё свободное время. Накопил два чемодана книжек по программированию. И повторял, что вместо выписывания счетов-фактур, я стану разработчиком. Первые веб-проекты поставили вопрос про хайлоад, сохранилась публикация в журнале Компьютер-Пресс, которая была перепечатана из интернетов в 2000-ом. Тогда же товарищ показал PHP, который меня очаровал. Ты решаешь прикладные задачи, остальное спрятано под капотом. Зачем я это рассказываю?

На 12 лет PHP стал основным инструментом моей новой профессии вебмастера. Хайлоад на чистом PHP и с применением демонов на C через интерфейс memcached. Но это был вертикально масштабируемый хайлоад. На конференциях рекламировали, что есть другой более эффективный путь - горизонтально масштабируемый хайлоад. Асинхроннная модель цикла событий в NodeJS обещала, что можно брать больше и кидать дальше. Хорошо, ещё 5 лет потрачено, пока не попробовал Golang. И это уже 2017-ый (надо было раньше). Божечки мои! Переход с NodeJS на Go - такой же кайф, как после Delphi на PHP. Ты снова решаешь прикладные задачи без лишних забот.

Вот он, настоящий горизонтально масштабируемый хайлоад. Горутины и каналы - это же элементарно, Ватсон. Ненавязчивая типизация, в сравнении с TypeScript. Отказ от фреймворков, подтверждённый развитой базовой библиотекой. Очень быстрый старт. Хотя простота обманчива, конечно. Собрал под 300 секретов на сегодня, это не предел. И я много раз видел, что большие легаси-системы на PHP и NodeJS применяют Go для удаления узких мест в хайлоад. Микросервисный подход решает самый главный вопрос - как управлять сложностью системы. Немного пугает воинствующая секта свидетелей идеоматичности. Другая крайность - появляются фреймворки, например Goravel. Но пока не вижу такого засилия, как Laravel и NestJS в экосистемах PHP и NodeJS.


Посмотрите на мой прекрасный проект для портфолио (архитектура из ОЗОНа с правильным покрытием тестами).

@comerc
05.11.2025 01:23 UTC
Первоисточник

Комментарии

@Isma
04.11.2025 20:39 UTC
-7

Плюсую. Такой же путь. Чтобы понять - надо пройти. Уже 5 лет в Golang. И в отличие от предыдущих стеков - до сих пор не воткнулся в задачу, где надо тянуть другие технологии. А в том же PHP не единожды приходилось в узких местах использовать что-то другое.

05.11.2025 05:58 UTC
+3

Попробуйте чего-нибудь связанное с математикой и тренировкой сетей сделать, и сразу что-нибудь еще потребуется. Go неплох для перекладывания json, все остальное не про Go

05.11.2025 10:21 UTC
0

k8s это перекладывание json? Прометеус/графана/терраформ? cockroach db?

05.11.2025 14:36 UTC
0

Так мы же про профессию вебмастера, а не вот это всё.

05.11.2025 08:09 UTC
+2

Десктопное ПО и мобилы не может

22.11.2025 19:06 UTC
0
14.11.2025 00:15 UTC
+1

Н-да. Нехило напихали и мне и ТС. Ну вы хоть граничные условия учитывайте. Сферические кони - они всегда круче всех.
Конечно речь была про web-мир. А если придраться - и у 1с есть своя ниша.

20.11.2025 10:43 UTC
0

Это мы с тобой в неадеквате, или все остальные?

@BOOTLOADER
04.11.2025 21:04 UTC
+3

Go хороший язык для небольших сервисов и реализация параллелизма наверно лучшее из всего (особенно после того, как ты написал сто миллионов async/await в С# или typescript), но недостаток инструментария все равно часто напрягает.

04.11.2025 21:05 UTC
+3

А в чём недостаток?

04.11.2025 22:43 UTC
+1

недостаток инструментария? В го?

Тот самый го который можно скомпилировать под что угодно, без головняка и эльфийского делать вставки из других языков или и вовсе подключать целые либы?

Тот самый Го в котором НОРМАЛЬНО построенная система либ (модулей) ?

Мы точно говорим про тот самый Го в котором тесты и бенчмарки перестали быть своим отдельным миром?

05.11.2025 06:08 UTC
+1

Json в excel попробуйте конветнуть )

Нет общей либы конвертации, приходится писать болейплейт, да ещё и поддерживать его

В других языках ставишь либу, вызываешь функцию

Модули в го могут называться одинаково и после этого начинаются танцы с бубном

05.11.2025 06:10 UTC
0

ну так это особенности статической типизации. можно все как map[string]any распарсить "в лоб" и с ним работать если прям горит, но по уму таки работать с четкими структурами данных

а за модули вообще смешно - ты можешь сам при инициализации указать какое удобно имя или вообще "прилинковать" напрямую. Даже если у тебя будет 10 одинаковых имен модулей, работать с ними ты будешь так как назовешь без каких либо жестких привязок или конфликта имен

05.11.2025 06:12 UTC
0

Модули в го могут называться одинаково и после этого начинаются танцы с бубном

Ответить cmyser

Это не то чтобы прям так уж критично, есть же алиасы.

05.11.2025 08:22 UTC
+2

В чем проблема с конвертацией? Подключаем пакет encoding/json, подключаем пакет для работы с экселем, перекладываем данные тем способом, который требуется. Все как в любом другом языке.

05.11.2025 02:20 UTC
+3

особенно после того, как ты написал сто миллионов async/await в С# или typescript

особенно классно узнавать, что какая-то функция работает асинхронно без единого намёка на это

16.11.2025 21:23 UTC
0

А что не так с async/await?

@Ru6aKa
04.11.2025 22:41 UTC
0

Go отличный язык для своей ниши, но есть нюансы. Если допустить что любой ЯП синтаксис+runtime+toolchain+stdlib имеет константную сложность, то у Go вся сложность перенесена в toolchain, в результате этого получаеться очень простой язык, но очень сложная обвязка вокруг него. Вот как пример https://golangci-lint.run/docs/linters/, 112 литеров это мягко говоря перебор. В Rust например ситуация кардинально противоположная, вся сложность перенесена в компилятор.
И как только дело касается soft real time или hard real time, то Go просто не подходит.

04.11.2025 23:30 UTC
+1

Линтеров больше, вот ещё: https://revive.run/r

Я и сам добавил парочку:
https://github.com/unused-interface-methods/unused-interface-methods
https://github.com/error-log-or-return/error-log-or-return


Мне нравится, что бьют по рукам линейкой, только когда попрошу.

@AbitLogic
05.11.2025 01:58 UTC
+2

Если человек не осилил Rust, то почему бы и не побаловаться с гошечкой, не осуждаем

05.11.2025 06:17 UTC
+4

Вакансий на Rust сейчас существенно меньше. Всем нужен Golang.

05.11.2025 07:21 UTC
0

Ну это другой вопрос, я варюсь в embedded, нам тут отродясь go не нужен был, но если есть возможность 90% бюджета вкладывать в девайсы с кучей ОЗУ, почему бы не побаловаться гошечкой....

05.11.2025 10:31 UTC
+9

"фиг знает зачем вам эта бмв, я вот работаю на стройке водителем катка и нам тут отродясь легковые автомобили были не нужны"

12.11.2025 06:52 UTC
0

Есть tinygo, который как раз и пытается перенести go в embedded

05.11.2025 10:22 UTC
+2

раст не нужен, не зачем его осиливать.

10.11.2025 18:31 UTC
0

Не нужен???

10.11.2025 19:10 UTC
0

Конечно - в любой области есть более подходящий для нее язык программирования.

05.11.2025 14:43 UTC
0

А кто тогда напихал минусов? Из лагерей PHP & NodeJS, вероятно. Шучу.

Я за любой кипиш, кроме голодовки. Пробовал и Rust, но у него же другое применение. А для профессии вебмастера - Go лучший, по моим ощущениям.

@FireWind
05.11.2025 05:29 UTC
0

Коллеги, пожалуйста, поделитесь мудростью: работая под Win в IDE (условно, Goland) как проще всего делать готовый исполняемый файл не только под Win, но и сразу под Linux? Т.е. сразу две сборки под разные системы?

05.11.2025 05:40 UTC
0

А зачем делать готовый исполняемый файл в IDE? Как будто для таких целей должен быть пайплайн настроен в каком-нибудь гитлабе.

05.11.2025 06:10 UTC
0

Приватный, бесплатный план на github. С action так не получится. Вот и мудрю, как решить этот вопрос наиболее простым и не геморным способом. Может быть через контейнер докер как то сделать генерацию под Linux

05.11.2025 06:32 UTC
+1

все получится, просто в настройках репы надо разрешить что бы actions имел права

https://github.com/voluminor/scripts-for-integration вот держите если надо с примерами, не так давно вычесал в очередной раз гитхаб. По ссылке в целом автоматизация, вам же надо чисто actions с тем как его можно "готовить"

05.11.2025 06:43 UTC
0

Может быть через контейнер докер как то сделать генерацию под Linux

Или в wsl собирать

05.11.2025 06:14 UTC
+3

сделать build с нужными параметрами если "в лоб". По красоте обернуть в контейнеры что бы собирало в той же ОС что бы не было сюрпризов

вообще из личной практики такое у меня собирается на стороне Ci/Cd в гитхабе с тестами, генераторами и тд. То есть по матрице паплайн на разные ОС и уже четко под ними пробегают тесты и если ок собираются (потому как могут быть мелкие подводные)

05.11.2025 08:20 UTC
+1

Если не используете CGO в проекте, то выставить две переменные окружения, отвечающие за архитектуру и ОС и запустить сборку

GOOS=linux GOARCH=amd64 go build -o myprogram_linux

Если CGO используется, то собирайте в локальном докер-контейнере, сделайте в мейкфайле, например, таргет для этого (или в любой другой системе запуска скриптов, которая вам удобна).

05.11.2025 10:52 UTC
0
@evgeniy_kudinov
05.11.2025 07:42 UTC
+1

Почему автору поставили минусы? Возможно, «я пиарюсь» было бы более подходящим тегом статьи.

Думаю, автору стоило бы рассказать о «300 секретах»: как он их создавал с помощью LLM. Мне и другим читателям было бы интересно об этом узнать.

Бегло глянул проект https://github.com/comerc/budva43. На мой взгляд и субъективный, впечатление, что нет понятной принятой в Go структуры проектов, как, например, https://github.com/golang-standards/project-layout, и на первый взгляд выглядит как беспорядочные папки и с проблемными неймингами. И типичные проблемы с repo, с функционалом который не должен быть по определению в патерне Repository.

05.11.2025 10:25 UTC
+5

Я поставил минус потому что статья не имеет никакой информационной цености, просто заметка "мой жизненный путь" в три абзаца. Хабр всетаки это не жж и не твиттер.

05.11.2025 14:29 UTC
0

Думаю, автору стоило бы рассказать о «300 секретах»: как он их создавал с помощью LLM. Мне и другим читателям было бы интересно об этом узнать.

За других не уверен, судя по негативной реакции на мои откровения...

В процессе загорается лампочка в голове, выписываешь вопрос. Правильно заданный вопрос - половина ответа. Клавдия всё знает. Потом интервальные повторения, что-то откладывается постепенно.

Наверно началось всё с подготовки к алгоритмической сессии в Нёбиус. Получил список алгоритмов, составил конспект. Зубрил целый месяц - не помогло.

Потом ещё была книжка "100 секретов Go", пока её штудировал, выписывал какие-то неочевидные для себя моменты. (Когда считаешь, что всё знаешь - а вот и нет).

А ещё опросники к собесам конспектировал.

05.11.2025 14:35 UTC
0

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

Просто не укладывается в привычные шаблоны. Почему нейминги проблемные? И какие вопросы к функционалу в repo? Было бы интересно послушать фидбэк.

@savostin
05.11.2025 07:58 UTC
-1

Ну не знаю, делал несколько подходов уже. Прям заставляю себя перейти. Но это урезаное, вернее альтернативное, понимание ООП, классов и прочего стопорит на этапе проектирования кода. Понимаю, что проще начать с go, чем переходить, но автор же прям восхищается легкостью перехода от php/typescript…

05.11.2025 10:27 UTC
+1

Для абсолютного большинства приложений ООП, особенно в том виде, в каком оно представленно в С++/Java просто не нужно.

05.11.2025 18:10 UTC
0

А я чето привык все в классы заворачивать…

05.11.2025 19:36 UTC
0

так это у вас не ооп, вы просто классы как модули используете.

05.11.2025 14:45 UTC
0

Это откуда переход не даётся?

05.11.2025 18:10 UTC
0

php, typescript, c++

05.11.2025 22:17 UTC
0

Так может не надо себя заставлять, если не идёт? Просто я влюбчивый. Clojure, Elixir, Flutter. Везде был очарован. Но не нашёл им применения, к сожалению.

20.11.2025 10:47 UTC
0

Есть урок на Ютубе - "Go за 4 часа". И полетели. Знаю пару бывших сишников, которые в восторге от гошечки.

@Gariks
08.11.2025 21:27 UTC
0

Я подумал сначала что статья написана нейросетью слово "хайлоад" встречается в каждом предложении. Автор вопрос, а что такое хайлоад?

@8bityeti
13.11.2025 22:16 UTC
+1

Нормально, ребята, вы напихали энтузиасту — -44

я изучаю golang, пока идёт тяжеловато, но что-то в нем есть 🙂

20.11.2025 10:46 UTC
0

Да ладно. Есть урок на Ютубе - "Go за 4 часа". И полетели. Где тяжело?

20.11.2025 11:14 UTC
0

Я просто тупой. 🤷🏻

20.11.2025 16:59 UTC
0

Так гошечка для тупых. Ничего не бойся.

20.11.2025 18:06 UTC
0

Понял. Буду дальше грызть ✊🏻