На моих трансляциях лайв-кодинга постоянно всплывает этот вопрос. Проговаривал много раз, но если записать ответ, то дальше можно просто выдавать ссылку.
Кодить начал в 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.
Посмотрите на мой прекрасный проект для портфолио (архитектура из ОЗОНа с правильным покрытием тестами).
Комментарии (38)

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

user-book
04.11.2025 20:39недостаток инструментария? В го?
Тот самый го который можно скомпилировать под что угодно, без головняка и эльфийского делать вставки из других языков или и вовсе подключать целые либы?
Тот самый Го в котором НОРМАЛЬНО построенная система либ (модулей) ?
Мы точно говорим про тот самый Го в котором тесты и бенчмарки перестали быть своим отдельным миром?

cmyser
04.11.2025 20:39Json в excel попробуйте конветнуть )
Нет общей либы конвертации, приходится писать болейплейт, да ещё и поддерживать его
В других языках ставишь либу, вызываешь функцию
Модули в го могут называться одинаково и после этого начинаются танцы с бубном

user-book
04.11.2025 20:39ну так это особенности статической типизации. можно все как map[string]any распарсить "в лоб" и с ним работать если прям горит, но по уму таки работать с четкими структурами данных
а за модули вообще смешно - ты можешь сам при инициализации указать какое удобно имя или вообще "прилинковать" напрямую. Даже если у тебя будет 10 одинаковых имен модулей, работать с ними ты будешь так как назовешь без каких либо жестких привязок или конфликта имен

MyraJKee
04.11.2025 20:39Модули в го могут называться одинаково и после этого начинаются танцы с бубном
Ответить cmyser
Это не то чтобы прям так уж критично, есть же алиасы.

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

hello_my_name_is_dany
04.11.2025 20:39особенно после того, как ты написал сто миллионов async/await в С# или typescript
особенно классно узнавать, что какая-то функция работает асинхронно без единого намёка на это

Ru6aKa
04.11.2025 20:39Go отличный язык для своей ниши, но есть нюансы. Если допустить что любой ЯП синтаксис+runtime+toolchain+stdlib имеет константную сложность, то у Go вся сложность перенесена в toolchain, в результате этого получаеться очень простой язык, но очень сложная обвязка вокруг него. Вот как пример https://golangci-lint.run/docs/linters/, 112 литеров это мягко говоря перебор. В Rust например ситуация кардинально противоположная, вся сложность перенесена в компилятор.
И как только дело касается soft real time или hard real time, то Go просто не подходит.
comerc Автор
04.11.2025 20:39Линтеров больше, вот ещё: 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
04.11.2025 20:39Если человек не осилил Rust, то почему бы и не побаловаться с гошечкой, не осуждаем

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

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

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

comerc Автор
04.11.2025 20:39А кто тогда напихал минусов? Из лагерей PHP & NodeJS, вероятно. Шучу.
Я за любой кипиш, кроме голодовки. Пробовал и Rust, но у него же другое применение. А для профессии вебмастера - Go лучший, по моим ощущениям.

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

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

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

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

strelkove
04.11.2025 20:39Может быть через контейнер докер как то сделать генерацию под Linux
Или в wsl собирать

user-book
04.11.2025 20:39сделать build с нужными параметрами если "в лоб". По красоте обернуть в контейнеры что бы собирало в той же ОС что бы не было сюрпризов
вообще из личной практики такое у меня собирается на стороне Ci/Cd в гитхабе с тестами, генераторами и тд. То есть по матрице паплайн на разные ОС и уже четко под ними пробегают тесты и если ок собираются (потому как могут быть мелкие подводные)

pav5000
04.11.2025 20:39Если не используете CGO в проекте, то выставить две переменные окружения, отвечающие за архитектуру и ОС и запустить сборку
GOOS=linux GOARCH=amd64 go build -o myprogram_linuxЕсли CGO используется, то собирайте в локальном докер-контейнере, сделайте в мейкфайле, например, таргет для этого (или в любой другой системе запуска скриптов, которая вам удобна).

evgeniy_kudinov
04.11.2025 20:39Почему автору поставили минусы? Возможно, «я пиарюсь» было бы более подходящим тегом статьи.
Думаю, автору стоило бы рассказать о «300 секретах»: как он их создавал с помощью LLM. Мне и другим читателям было бы интересно об этом узнать.
Бегло глянул проект https://github.com/comerc/budva43. На мой взгляд и субъективный, впечатление, что нет понятной принятой в Go структуры проектов, как, например, https://github.com/golang-standards/project-layout, и на первый взгляд выглядит как беспорядочные папки и с проблемными неймингами. И типичные проблемы с repo, с функционалом который не должен быть по определению в патерне Repository.

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

comerc Автор
04.11.2025 20:39Думаю, автору стоило бы рассказать о «300 секретах»: как он их создавал с помощью LLM. Мне и другим читателям было бы интересно об этом узнать.
За других не уверен, судя по негативной реакции на мои откровения...
В процессе загорается лампочка в голове, выписываешь вопрос. Правильно заданный вопрос - половина ответа. Клавдия всё знает. Потом интервальные повторения, что-то откладывается постепенно.
Наверно началось всё с подготовки к алгоритмической сессии в Нёбиус. Получил список алгоритмов, составил конспект. Зубрил целый месяц - не помогло.
Потом ещё была книжка "100 секретов Go", пока её штудировал, выписывал какие-то неочевидные для себя моменты. (Когда считаешь, что всё знаешь - а вот и нет).
А ещё опросники к собесам конспектировал.

comerc Автор
04.11.2025 20:39на первый взгляд выглядит как беспорядочные папки и с проблемными неймингами. И типичные проблемы с repo, с функционалом который не должен быть по определению в патерне Repository.
Просто не укладывается в привычные шаблоны. Почему нейминги проблемные? И какие вопросы к функционалу в repo? Было бы интересно послушать фидбэк.

savostin
04.11.2025 20:39Ну не знаю, делал несколько подходов уже. Прям заставляю себя перейти. Но это урезаное, вернее альтернативное, понимание ООП, классов и прочего стопорит на этапе проектирования кода. Понимаю, что проще начать с go, чем переходить, но автор же прям восхищается легкостью перехода от php/typescript…
Isma
Плюсую. Такой же путь. Чтобы понять - надо пройти. Уже 5 лет в Golang. И в отличие от предыдущих стеков - до сих пор не воткнулся в задачу, где надо тянуть другие технологии. А в том же PHP не единожды приходилось в узких местах использовать что-то другое.
WLMike
Попробуйте чего-нибудь связанное с математикой и тренировкой сетей сделать, и сразу что-нибудь еще потребуется. Go неплох для перекладывания json, все остальное не про Go
sdramare
k8s это перекладывание json? Прометеус/графана/терраформ? cockroach db?
comerc Автор
Так мы же про профессию вебмастера, а не вот это всё.
ForestDront
Десктопное ПО и мобилы не может