Обновить
12

Пользователь

1
Подписчики
Отправить сообщение

Это финтех. Гигантский монолит на джаве и несколько микросервисов вокруг него на питоне. Вся эта машинерия в сутки считает миллионы долларов. Довольно серьезный уровень, где нужно чтобы все работало 24/7. Вполне энтерпрайз, имхо...

Да и российские маркетплейсы, которые на Go написаны, вполне очень хардкорный уровень. Пусть и не энтерпрайз в классическом понимании.

А чем отличаются требования на Го сеньора и требования на Java (или .NET) сеньора?

Лично видел людей, которые становились го сеньорами, которые до того писали много на джаве. Скорее важен общий опыт в бекенде, умение строить микросервисную архитектуру, опыт с kafka, базами, телеметрией итд итп. Язык тут в целом вторичен. Поэтому многие компании нанимают людей без привязки к конкретному языку.

И не понятно, почему эти требования считаются высокими. Как по мне, далеко не высокие, а вовсе обычные.

Виртуальных тредов в Rust из коробки нет. Надо использовать Tokio, что почти всегда сложнее чем горутины и каналы в Go. Без GC писать тоже кратно сложнее чем на языке с GC.

С PHP? Лол

Ну я пришел в Go после нескольких лет джавы. Проект рабочий сйчас мигрирую с джавы и питона на Go.

О покрытие всего этого тестами я вообще молчу

я не знаю, как на этом писать код, у которого можно проверить гарантированную корректность работы

А в чем проблема? Тестовый пакет есть в стандартной либе. Тестконтейнеры тоже есть. Не вижу каких-либо отличий в том, как тестируют на Python/Java/C# и как это делают в Go.

Есть целая бесплатная опенсорсная книжка про то, как писать тесты для Go кстати. Очень хорошая, всем рекомендую. https://quii.gitbook.io/learn-go-with-tests

а вместо нормальных dto

Вполне используем DTO для джейсончиков и для походов в базу.

каждый новый микросервис уникален и не похож ни на что другое, виденное ранее

А в чем уникальность?

А преувеличение чего? Async/await однозначно делит мир на два отдельных мира - сихронный и асинхронный, между которыми приходится прокладывать довольно сложные и причудливые мосты. В Go все синхронное.

Добавить в язык async/await - однозначно и навсегда выполнить это разделение. Поэтому в джаве и не стали так делать, хотя в общем-то могли и обсуждали.

Тут трейдофф есть очевидный.

Можно в стандартную либу пихать много и всякого. Как в общем-то и делали на заре Java и .NET, где старались добавить абсолютно все, чего угодно разработчику, даже собственную GUI библиотеку (Swing/AWT, Winforms, WPF и прочее).

Либо делать стандартную либу максимально урезанной и без ничего (как например в чистом Си).

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

Но в случае с минимальной либой как в чистом Си банально сложно писать код. Где нет ни map, ни list, ни нормальной работы со строками.

Имхо Go попытался попасть в середину так чтобы нигде никому не навредить и отчасти им это удалось. Но местами вышло явно неудачно, например отсутствие нормальных коллекций из коробки на старте языка и довольно причудливое API для взаимодействия с ними. Но что есть, то есть...

Не совсем понятно, куда переезжать с Go. А на Go много кто уже переехал и переезжает прямо сейчас.

По-хорошему в бекенде нужен язык как Java, но:

  • без наследования (но с интерфейсами)

  • с виртуальными тредами

  • с нормальными дженериками

  • с легковесным рантаймом

  • компилирующийся в бинарь со всеми зависимостями

  • с наличием GC

В целом, Go более-менее удовлетворяет всем этим требованиям. Если бы не личные шизоидные идеи Роба Пайка и его странный, местами, взгляд на то, каким должен быть язык программирования, то возможно мы бы получили более лучшую версию Go чем есть сейчас. Но что есть, то есть.

тысяча бывших таксистов пришла, потом тысяча ушла

Про таксистов конечно же wishful thinking, на Go вполне тяжелые проекты пишут, где вчерашние таксисты с курсов вряд-ли потянут... Да и вообще на Go обычно переходят с других языков, либо студентов из хороших универов на стажировки берут.

А какой именно магии? Шедулер горутин и netpoller? Кроме GC это единственная магия, которая в Go есть. Все остальное крайне простое и топорное.

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

В общем-то в джаве и пошли по пути зеленых потоков (они же virtual threads в java или goroutines в go), просто потому что это проще для разрабов, чем async/await.

Concurrency в Go сделано на порядок лучше (имхо) чем в c#, js, python и ruby. Rust - гораздо более сложный и тяжелый для чтения язык. Фишка Go как раз в том, что код очень прозрачный, нет никакой магии рефлексии, AOP, прокси и всякого синтаксического сахара - можно в любой точке проекта поставить брейкпоинт и дебажить без боли. Нет невидимых действий под капотом, кроме разве что GC и шедулера горутин.

На питоне так вообще разрабатывать что-то больно. Если mypy с самого начала не завезли, то все, пиши пропало...

rate limit

А зачем он в стандартной библиотеке?

https://pkg.go.dev/golang.org/x/time/rate - вот эта либа как раз и написана разрабами из гугла и ими поддерживается. Просто решили не тащить его в стдлибу, вот и все.

Походу много чего надо писать самому руками

В целом нет. Вся необходимая обвязка пишется за пару часов руками или за 10-20 минут при помощи LLM, дальше разработка бинес-логики почти не отличается от того, как это на джаве/питоне/сишарпе происходит.

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

Вряд ли. Кроме MS в дотнет никто денег не вкладывает. Для постоянного развития языка и CLR нужна команда разработчиков на зарплате. И если условную Java еще пытаются как-то допиливать в недрах Amazon или RedHat, то .NET целиком и полностью существует за счет MS.

Да почему, лично участвовал в процессе миграции Java финтех-монолита со сложной бизнес-логикой на несколько Go-сервисов. И DDD, и бизнес-правила, и сущности сложные - все это было. И ничего, нормально за пару лет мигрировали. Поверьте, в крупных российских маркетплейсах вроде Ozon и WB бизнес-логика наверняка еще более сложная чем у нас, и тем не менее они уже годами живут преимущественно на Go и развивают свои сервисы, вон даже банк на Go запилили.

Насколько я помню, этот рейтинг основан на том, как часто в поисковой выдаче упоминается тот или иной язык программирования. В эпоху LLM этот рейтинг вероятнее всего станет еще более оторванным от реальности чем ранее, потому что все стали использовать ту или иную LLM вместо Гугла, а сайты с туториалами по программированию для новичков кажется совсем отжили свое. Если уж и смотреть на рейтинги, то лучше на JetBrains Developer Ecosystem или GitHub Octoverse.

ему Go-мышление мешает

А в чем заключается это "Go-мышление" и как оно мешает сервисы проектировать?

Российский бигтех сейчас на Go переезжает массово. Java 11 - это нечто весьма старое. А питон - это язык для всех задач и на все времена.

Однако лично наблюдаю как и на российском рынке, и на зарубежных рынках идет активная миграция на Go. Не только с PHP, Python и Ruby, а еще и с Java и C# в том числе. В общем-то не вижу ни одной причины начинать новый бекенд проект не на Go, а на каком-то другом языке, когда Go специально для бекендов и сделали.

2

Информация

В рейтинге
7 547-й
Зарегистрирован
Активность