> Гошка как раз отличная вещь, можно написать сервис который вещь в себе и работает без сложного окружения.Без сложного окружения?! Go - это мерзота, которая тащит как попало собранные куски кода внутрь единого бинарника. Все "окружение" у него внутри, потому что снаружи оно вообще не имеет никакого окружения, не имеет логики бинарного модулей, и как следствие не имеет взаимодействия между модулями. А еще они логику сборки меняют чаще чем нижнее бельё. Вот неплохая статья про Go с его "модульностью": https://maelvls.dev/go111module-everywhere/
"Гошка" - это где разрабы не умеют делать релиз и не знают что это такое. Её управление "модулями" и зависимости, привязывающиеся к хэшу коммита на github или еще в какой-то другой системе управления версиями. При этом _релиза_ как такового в Go нету. Есть 100500 модулей, которые в общем случае зафризены по последнему комиту в общей кодовой базе, которая в свою очередь даже тегов может не иметь. Все в кучу свалено. При сборке они выкачивают это барахло по сети и собирают себе в единый бинарь.
Проблема отсутствия релизов и проблема отсутствия бинарных модулей - 2 разные проблемы. Отсуствие бинарных модулей делает этот язык весьма ограниченным и нишевым (нет жизни вне микросервисных проектов от слова "совсем"). Отсутсвие концепции релиза на проект, опциональность релиза напрочь меняет ворос управления разработкой проекта на Go. Если в нормальное экосистеме разработчики вынуждены:
- делать релиз,
- сопровождать релиз
-- исправлять ошибки в релизе
-- исправлять уязвимости в релизе
- следить за обратной совместимостью API внутри релиза (бинарным требуется еще и ABI)
То тут абсолютная помойка. КОНЕЧНЫЙ проект грузит в себя код модулей из гитхаба. И все его модули и зависимости это просто 1001 срез текста, который никто не сопровождает. И у каждого такого модуля есть еще модульные зависимости, которые никто толком не сопровождает и так влоть до N вложенных зависимостей. То есть сопровождает это всё погромист на гошке, то есть ТЫ!
Допустим твой проект хочет 2 модуля:
- mega-lib-2-5-blablahash1, ты выбрал актуальную версию в которой исправлены уязвимости и ошибки
- ultra-lib-1-4-blablahash2, ты выбрал актуальную версию
И второй модуль гвоздями привязан к mega-lib-2-4-blablahash3, потому что иди нафиг. И всё это сливается в единый бинарь в одну кодовую базу, которую поддерживаешь ТЫ, потому что релиз - не барское дело для гошников. Если npm и pip это формы рака, то модули go - это уже СПИД.