LINUX.ORG.RU

Golang в крупных проектах возможен (back)?

 


0

6

В enterprise например, да и вообще где нужно много бизнес-логики?

Встречал мнение, что этот язык плохо для этого подходит. Хочу разобраться почему. Там нет фреймворков уровня Laravel/Spring? Скорее всего позже добавят. Отсутствие привычного ООП мешает его юзать? Нельзя обойтись текущими средствами Go?


При чём вообще фреймворки к бизнес-логике. Фреймворки для придания структуры твоему приложению/сервису, для переиспользования типовых решений типовых рутинных задач. Бизнес-логика вообще не должна зависеть ни от какого фреймворка.

Nervous ★★★★★
()
Ответ на: комментарий от beastie

И так полно больших проектов

И все они - технические решения. Компиляторы, интерпретаторы, веб-сервера, бд, схд и т.д. / т.п.

Речь (в оп-посте и этом треде) идёт о бизнес-решениях, т.е. решениях задач вне технической инфраструктуры. И последние лет 10 - 15 там вообще-то было модно тугосерить наносервисами, что будет прямой противоположностью крупному ынтырпрайзному монолиту.

LamerOk ★★★★★
()
Последнее исправление: LamerOk (всего исправлений: 1)
Ответ на: комментарий от LamerOk

Если кому-то вдруг приспичило писать тырпрайзный бэкенд на го, то можно запросто высрать сотни тыщ строк. Просто потому, что придется с нуля реализовывать весь этот ваш спринг. Кажется полнейшей дурью, но я верю, что такое возможно. Дефективные менеджеры и не такое могут, вон где-то тут пробегал чувак, который на работе переписывает бэкенды с питона на раст.

anonymous
()
Ответ на: комментарий от LamerOk

Кто ж тебе коммерческую тайну то показывать будет? Нанимайся на работу и всё это увидишь.

У нас два десятка с гаком микро-монолитов. Немного обвязки в виде grpc и туева хуча бизнес-логики, от документо-оборота и до всяких api к sap. Никаих фреймворков. Всё стоковое или самописное.

beastie ★★★★★
()
Ответ на: комментарий от anonymous

Просто потому, что придется с нуля реализовывать весь этот ваш спринг.

Тут 2 подхода.

  1. вляпятся в какой-нибудь комбайн и бороться с ним
  2. реализовать суб-сет того, что конкретно надо тебе и спать спокойно

Тут кстати ещё один большой плюс Go: когда мы начинали был ещё go1.6. С тех про все изменения версии прошли без сучка и задоринки.

beastie ★★★★★
()
Ответ на: комментарий от beastie

а что там в вашем го с горутинами? поскольку (насколько я помню), это просто очереди задач на воркерах(реальных тредах), можно легко вляпаться в дедлок, причем недетерминированным образом. не?

alysnix ★★★
()
Ответ на: комментарий от Aber

Кафку рассматривали, но отказались. К нему ещё трёх админов нанимать надо. Сервисы между собой через gRPC (исторически) и через доморощенный event-stream на основе Postgres общаются.

Мы вообще за 10 лет много чего выкинули на мороз. Один Postgres остался. У нас как раз 2-й подход. Лучше я нарисую свою маленькую либу под свои нужды, чем буду бодаться с third-party комбайном.

beastie ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Давай сразу прогеров на асме искать

Пусть на асме ИИ пишет. Идея такая: набираем узбеков за доширак, даем им в лапы пхп (сабж сгодится), они корябают бездарный говнокод без всякого ревью и тестирования. Дальше ИИ исследует это наскальное творчество и выдает корректный ассемблерный код без единой лишней инструкции. Всё, дорогие пограмисты с дипломами больше не нужны. Тем более, что так оно сейчас примерно и происходит, только код на выходе мягко говоря не идеальный. Потому что компиляторы тупые пока что.

anonymous
()
Ответ на: комментарий от LamerOk

И последние лет 10 - 15 там вообще-то было модно тугосерить наносервисами, что будет прямой противоположностью крупному ынтырпрайзному монолиту.

Если речь всё ещё идёт о SLOC, то в микросервисах это число должно быть больше.

kaldeon
()
Ответ на: комментарий от Nervous

При чём вообще фреймворки к бизнес-логике.

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

anonymous
()
Ответ на: комментарий от Nervous

Кратко суть вопроса: вот есть язык для мелких утилит и микросервисов, можно я буду на нем тырпрайз лабать? Ну можно, а чо такого. Флаг в руки! Даже история успеха есть от регистранта. Только придется сначала свой спринг написать, но кого это останавливает. Наоборот, так интереснее же.

anonymous
()
Ответ на: комментарий от alysnix

а что там в вашем го с горутинами?

Они везде и всюду. Часто даже под капотом и незаметно. В частности каждый http запрос обрабатывается в своей go рутине, как для примера. Заработать deadlock ещё очень сильно постараться надо.

beastie ★★★★★
()

В enterprise например

Встречал мнение, что этот язык плохо для этого подходит.

Это странное мнение. Как раз для enterprise он и подходит хорошо. И создан не просто так именно гуглом.

Это не делает язык объективно «хорошим», впрочем. (Плохим тоже)

CrX ★★★★★
()
Ответ на: комментарий от rtxtxtrx

Это не наследование, а embedding. У них есть какие-то общие свойства, но разницы тоже много: главное — отсутствие полноценных виртуальных функций. Попав в базовый объект ты никак не вызовешь функцию наследника.

anonymous
()
Ответ на: комментарий от CrX

Как раз для enterprise он и подходит хорошо

Только надо уточнять для каких задач. Девопс? Да. Микросервисы для хайлоада? Да. Корпоративный бэкенд? Ну лол же.

anonymous
()
Ответ на: комментарий от Toxo2

https://github.com/go-pg/pg/blob/v10/listener.go - вам вот с первого раза понятно, что там они навертели вокруг NOTIFY/LISTEN ? Все гошники такое по 10 раз в день пишут?

Нет, гошники такое не пишут 10 раз в день, но код вполне понятный.

Более того, даже стандартная библиотека написана очень просто. Если какой-то нюанс не очевиден из документации, ты просто прыгаешь в реализацию и читаешь код. Это разительно отличается от C/C++ или Раста, например.

anonymous
()
Ответ на: комментарий от anonymous

ты просто прыгаешь в реализацию и читаешь код.

а потом, когда все сломалось и ты долго искал почему,… ты опять прыгаешь в реализацию,.. в там другой код. и некому предъявить претензии.

alysnix ★★★
()
Ответ на: комментарий от anonymous

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

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

а проще(и правильней) всего вводить интерфейсы и механизм имплементации (со статическими проверками разумеется) его.

alysnix ★★★
()
Ответ на: комментарий от alysnix

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

Попробуй найти вакансию в РФ на гошку, где людей берут с улицы. Скорее, наоборот чаще люди приходят с опытом работы на других языках.

Найди здесь хоть одно упоминание набора с улицы и адаптации языка специально под эту цель.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от alysnix

утиная типизация. то есть еще один костыль

Представляю переписку разработчиков Гошки.

— Расс, ты знаешь как сделать статические интерфейсы?
— Нет. И не знаю зачем они нужны.
— Ну ладно, тогда делай как попало.

для того чтобы утиная типизация не порождала дыры в надежности сравнивать надо контракты функций

Утиная типизация позволяет плодить меньше сущностей (контракты, зависимости), писать более выразительный/короткий код. Это весело, в конце-концов. А описанная проблема о несоответствии контрактов встречается почти никогда, зато философы языков программирования хотят обязать абсолютно все языки переделать джаву.

Ну вот интересный пример: /bin/cat явно не указывает зависимость от NFS. И это фича, а не проблема.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 3)
Ответ на: комментарий от anonymous

Типа такого: https://github.com/go-spring-projects/go-spring

Хотя вроде такой фигни на go сотни …

Напомните мне пожалуйста как называется та штука на которую Fedora перешла за место githab и причем долго выбирали между всякой ерундой типа gitlab (где в основном не go а ruby) и т.д. ?

mx__ ★★★★★
()
Ответ на: комментарий от FishHook

Какие претензии к расту?

У меня свои претензии, т.к. я тоже с ним ковырялся, особенно в сравнении с Go.

  1. Каждый кулик свой crait пилит. Одних только http клиентов пальцев считать не хватит. А если ещё и tsl нужен… В Go один.
  2. Названия у всего, как у покемонов. Никогда не знашь, какой crait искать, и что он делает. В Go с этим проблем нет.
  3. Документация отсутствует как класс. Точнее она есть, но в 90% пустая. В Go с этим проблем нет.
  4. Отсутствие stdlib как класса. В Go с этим проблем нет.
  5. Проапдейтится с версии на версию – всё валится. В Go проблем нет.
  6. То, что можно было сделать автоматически, рулится в ручную. Наследие malloc/free никуда не делось. Оно просто теперь borrow-checker называется.
  7. Жутко раздутый синтаксис. Там где в Go можно просто прокинуть interface в структуре, в rust это всё разрастается в много-экранные декларации генериков на методах. Которые повторяешь и повторяешь …
  8. Наркоманские макросы.
  9. Rust паникует в runtime just fine. Хвалёный memory safety только для запудривания.

index out of bounds: the len is 76800 but the index is 18446744073709551296

И это в коде без всяких unsafe.

TL;DR: в Go сел и пишешь, что тебе надо. В Rust – сначала *бёшься, потом ещё *бёшься и так всё время.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 3)
Ответ на: комментарий от kaldeon

Что-то это напоминает:

«Банк фунционирует преимущественно как дистанционный онлайн-банк, хотя имеет один московский офис. Пункты выдачи Озон используются как дополнительные места обслуживания (места выдачи банковских карт, которые можно заказать на озоне за 1 рубль).» (С) где же тут подвох... ума не приложу. Напоминает одного торговца пельменями и пивом, который платиновые кредитки своего «тоже банка» в почтовые ящики подкидывал с книжками про свой успешный успех.

Ах да:

«Лицензия №3542 от 12 апреля 2023 года

Год основания 2022»

Совсем не удивительно что он «сделан на горш...» на гошке. Совсем не подозрительно. После ребрендинга все пахнет свежим... свежим и точка.

slackwarrior ★★★★★
()
Ответ на: комментарий от beastie

Кто ж тебе коммерческую тайну то показывать будет?

Тогда мы от прямых свидетельств наличия слона переходим к попыткам определить его наличие по косвенным признакам и ощупываем всё свисающее на букву «х» - хоббот, хвост и остальное.

И тут картинка выглядит не так радужно. По жабе / дотнету все признаки ынтырпрайзности от руководств по включению компьютера до сертификации на специалиста по включению компьютера попёрли прямо сразу с релиза. А затем полезли глубокие философствования на тему object–relational impedance mismatch и фреймворки, пытающиеся решить эту проблему, наряду с шаблонизацией и прочем.

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

А вот по гошечке всех этих внешних косвенных признаков ынтырпрайзности не видно. У нас есть по хашикорпу с кубернетисом, полторы ORM, штуки три веб-серверов и 100500 пакетов уровня npm. Это всё пока что свидетельствует, что ынтырпрайзность у гошечки где-то в районе жабаскрипта.

Я был бы рад увидеть опровержения этой точки зрения.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

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

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от LamerOk

А толку от этого Энтерпрайза? В сертификатах что ли? Всяких спецификациях? И дальше что?

Вон замена gitlab работает на малинке а github/gitlab так могут?

А знаешь как масштабируется prometeus? Тысячи данных с тысяч компьютеров а все летает причем с полным отказом любой цепи. Вот это реальный энтерпрайз а не какие то там сертификаты.

mx__ ★★★★★
()
Ответ на: комментарий от beastie

b2b проект на ~400k loc сойдёт?

Я тоже захотел посчитать, вышло 1300K (исключая генерируемый код, пустые строки и комментарии). Это только те проекты, которые я склонировал себе на ноут, а работаю я всего-лишь полгода.

Реальная проблема - как справится со всей этой кучей сервисов. Видимо, никак.

kaldeon
()
Ответ на: комментарий от vbr

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

kaldeon
()
Ответ на: комментарий от vbr

Так они в своем Энтерпрайзе (javaBeans) так запутались что даже сами уже не понимали как это работает а им (java программерам) хотелось какой то упрощенки типа RoR (рельсов) вот и обрадовались спрингу.

mx__ ★★★★★
()

Объективно говоря, го лучшее решение для крупных проектов. Строгая статическая типизация, быстрая компиляция, идиоматический код выглядит везде одинаково, лучше не придумаешь

nikolnik ★★★
()
Ответ на: комментарий от mx__

Да я в курсе, я с этими еями и спрингами вырос можно сказать. Мне больше по нраву простой последовательный код, как в том же Go, а не развешивание аннотаций и потом неделями отлаживаешь, а какая же тварь эту аннотацию парсит и что при этом реально происходит, продираясь через 5 слоёв абстракции.

Если говорить про Java, то там сейчас из условно-популярных это Helidon SE. Условно - потому, что спринг и Java раздельно уже, видимо, никогда не будут писаться и всё остальное это жуткая минорщина, которую в проект затянуть прям проблема. И вообще у жавистов уже мозги набекрень, обгенерируются своего кода и эт самое.

В общем лучше бы не выкатывали. Ее сдохло бы само под своим весом, а там глядишь появилась бы здоровая конкурентная экосистема.

vbr ★★★★
()