Микросервисная архитектура — это новый черный: кажется, уже все бигтехи пилят монолиты на сервисы и и ищут гошников в штат. Спрос рождает предложение — всё больше ребят переходят с других бэкенд-языков на Golang.
Мы попросили наших разработчиков поделиться своим опытом перехода на Go и рассказать, почему они решили освоить новый язык программирования, какие плюсы и минусы видят в нём, дал ли переход на Go буст в новых карьерных возможностях и кому и в каких случаях они бы они советовали освоить golang.
Эта статья может быть полезна тем, кто тоже хочет добавить Go в копилку знаний, но пока не решился. Приступим!
Почему появилась потребность осваивать новый язык программирования? И почему именно Go?
У меня был опыт работы на С++ и на Ruby. В C++ мне не хватало гибкости, свободы и легкости написания кода, из-за статической типизации и постоянного контроля выделенной памяти. В Ruby эти плюсы присутствуют, но приносят дополнительные проблемы по мере роста приложения.
Хотелось попробовать что-то модное и молодёжное, но при этом не терять в гибкости. Go подошёл под мой запрос идеально. Бонусом он еще и компилируемый — по этому я уже успел соскучиться.
Поскольку Go обрёл популярность сравнительно недавно, он будет точно востребован ближайшие годы. То есть до спада спроса есть ещё время залететь на волну и научиться владеть им хорошо.
Антон Шилин
Go-разработчик в Купер.тех
У меня было 7 лет опыта работы джавистом, и я просто устал от гиперинжиниринга в Java — не нравилась сама инженерная философия этого языка. Понял, что нужно куда-то двигаться. Мне попался Go, и два раза очень меня удивил.
Первый раз — когда приложение на Go очень быстро собралось. Java в этом плане гораздо дольше и медленней. В первый раз мне показалось, что компиляция вообще не могла пройти так быстро.
Во второй раз — когда я увидел, что в Go используется метод для перевода символов в int atoi(). И я прям вспомнил, как я был молодым щеглом, писал на C, и там тоже используется этот метод. И я подумал — как же хорошо, и понял, что мне уже абсолютно неинтересно возвращаться обратно в Java-мир.
А дальше был глас судьбы — меня позвали на собес по Go (я сказал, что не гoшник, а меня всё равно позвали), а я его ещё и прошёл. Так всё и случилось.
Александр Карпов
Go Team Lead в Купер.тех
Я поработал в разных стеках: с компилятором и без, со строгой типизацией и динамической — понял, что концепции и подходы из одних языков можно переиспользовать в других, из чего может вырасти интересная и полезная интеграция.
Когда началась популяризация Go в русскоязычном сегменте, решил попробовать. Понял, что там много непривычных для меня подходов, и мне это нравится. Я продолжал работать на проектах с Java и Ruby, но всё чаще ловил себя на том, что на Go это было бы удобнее. Потом Купер сделал мне оффер, и я уже окончательно перешёл на Go.
Максим Исаченко
Senior Go-разработчик в Купер.тех
Если сравнивать с языком, на котором до этого писал, какие плюсы/минусы видишь в Go?
У меня был почти весь фарш: и С, и Ruby и JavaScript и Java, и Scala, и Kotlin.
Плюсы Go для меня очевидные: компилируемый, типизированный, с богатым тулингом.
Думаю, что для джунов Go — лучший выбор, потому что он простой, относительно Java, С++ и других. В нём легче писать многопоточные программы, потому что там есть мощные примитивы и модель памяти, которая гораздо проще, чем в той же Java.
Один из минусов Go по сравнению с Java и Kotlin — чуть больше придётся писать руками, но, к счастью, у нас есть кодогенерация и много хороших библиотек, которые помогут с этим справиться.
Максим Завырылин
Senior Go-разработчик в Купер.тех
На С++ возвращаться не хочу — на нём особо не пишут веб, а значит, нужно скорее писать что-то для железок, и ты привязан к месту, где эти самые железки и находятся, чтобы их настраивать. Удалёнка становится недоступна, а для меня это очень критично. А Go — всё-таки в основном веб-инструмент.
Но вот тесты на Go писать не очень удобно, в отличие от Ruby: много заморочек, слишком сложные и длинные. В Ruby ты в одну строку можешь сделать очень много действий, и если что-то пойдёт не так — задолбаешься разматывать клубок в поисках ошибки. И вот если ты Ruby разработчик, который устал разматывать вот эти клубки непонятных однострочников, которые, размазаны по слоям всяких паттернов, то в Go сюрпризов таких никогда не будет, ты всегда будешь знать, если где-то что-то отвалилось, точное место, где это отвалилось и почему оно отвалилось.
И в этом плане Go понятнее, спокойнее и легче. Мне очень нравится, что код на Go можно читать и писать без подсветки синтаксиса.
Антон Шилин
Go-разработчик в Купер.тех
Открывает ли Go новые карьерные возможности?
Go сейчас практически везде, где пишут какой-то бэкенд: что-то, да будет на нём написано. Поэтому, думаю, что опыт работы на Go — классный пункт резюме.
Максим Завырылин
Senior Go-разработчик в Купер.тех
Думаю, все, когда выбирают язык программирования, оперируют двумя основными параметрами: востребованность и зарплата. И вот, мне кажется, Go сейчас прямо идеально подходит по этим двум параметрам.
Все активно пилятся на микросервисы, и специалисты со знанием и монолитов и микросервисов нужны очень много где.
Антон Шилин
Go-разработчик в Купер.тех
Сказать, «работаешь на Go, значит гребёшь деньги лопатой» — соврать. Зарплата зависит от твоих скиллов — как менеджерских, так и инженерных. Но если смотреть по российскому рынку — у гошников всё хорошо.
Максим Исаченко
Senior Go-разработчик в Купер.тех
Кому ты бы рекомендовал перейти на Go?
Любому, кто пишет на PHP, Ruby и Python, я бы советовал изучить Go, чтобы расширить кругозор и «отвести душу»: написать что-то в удовольствие, не громоздкое, со всеми нужными инструментами. Всё для эффективности разработчика сделано уже прям вот создателями языка.
Максим Завырылин
Senior Go-разработчик в Купер.тех
Я бы советовал перейти на Go таким, как я — кто пишет на Ruby и скучает по строго типизированному и компилируемому языку.
И если у кого-то был в прошлом любой С-подобный язык, и они по нему скучают, думаю, что Go тоже зайдёт.
А вот Ruby-разработчикам «по любви» я бы Go не советовал: в Ruby можно написать две команды через точку и случится магия, а вот в Go магии нет, но есть максимум понятного кода.
Антон Шилин
Go-разработчик в Купер.тех
Когда к нам в команду потребовались go-разработчики, я стал активно рекомендовать своим знакомым пересесть на Go.
Я работал с переходниками с PHP и Java внутри команды, за первую неделю они писали маленький пэт-проект. За вторую — докидывали к проекту логи и метрики. И, начиная с третьей недели, они уже писали рабочие микросервисы, делали фичи.Думаю, кому угодно можно переходить на Go. Только важно не тянуть за собой прошлое, и не идти в новый монастырь со старым уставом.
Александр Карпов
Go Team Lead в Купер.тех
Переходить или не переходить на Go — решать вам, а мы будем рады, если вы поделитесь в комментариях своим мнением, опытом, или, может быть, советами :)
Tech-команда Купера (ex СберМаркет) ведет соцсети с новостями и анонсами. Если хочешь узнать, что под капотом высоконагруженного e-commerce, следи за нами в Telegram и на YouTube. А также слушай подкаст «Для tech и этих» от наших it-менеджеров.
Комментарии (11)
1nd1go
01.11.2024 10:23Какой богатый тулинг? :)) Как там драйвер постгреса подключается, напомните пожалуйста, и коннекшн пул делается?
zavyrylin
01.11.2024 10:23Не надо смешивать инструменты и библиотеки. Тулинга в гошке море: одной инсталляции go уже достаточно для автоформатирования кода, пакетизации и модуляризации, сборки (в т.ч. кроссплатформенной), запуска тестов, кодогенерации, профилирования и прочее, прочее, прочее. И это только базовый набор.
В опенсорсе моря всякого другого.
vic_1
01.11.2024 10:23Говно это ваше го, Си 70 годов прошлого века. Язык должен приносить что то новое, что принёс го - нефига, 0 полный
zavyrylin
01.11.2024 10:23должен
Новый язык всегда решает чью-то проблему (да хотя бы попиариться и лулзы поймать). Гошка решает, очевидно, солидный пласт проблем хотя бы в том же Гугле.
sdramare
01.11.2024 10:23Подобный комментарий может написать только человек, который никогда в жизни не писал ни на С, ни на Го.
vic_1
01.11.2024 10:23На сях я писал лет 15 назад, на го сейчас периодически есть зада и поверьте, никто из нашей команды не рвётся что писать на го, поэтому периодически возникает необходимость миграции сервисом с го на джава
sdramare
01.11.2024 10:23Говно это ваше го, Си 70 годов прошлого века
Го из коробки содержит - GC, поддержку динамического полиморфизма, интерфейсы, стекфулл корутины, каналы, слайсинг для векторов, юникод и ламбда-функции. Ничего из этого в С нет и вряд ли будет в ближайшие 50 лет. По-этому говорить об их схожести абсолютно невозможно.
Язык должен приносить что то новое, что принёс го - нефига, 0 полный
Как минимум го принес решение проблемы цветных функций. Но подозреваю вы даже не знаете что это.
поверьте, никто из нашей команды не рвётся что писать на го
С учетом что ваша команда состоит из людей, которые думают что между С 70х и Го нет разницы - охотно верю.
поэтому периодически возникает необходимость миграции сервисом с го на джава
Если вы тратите время, переписывая код с Го на Джаву только потому что вашей команде не хватает профессиональных качеств чтобы разобраться в одном из самых простых языков программирования - ну можно только пожалеть тех людей, который почему-то платят вам деньги за вашу "работу". Что поделаешь, бывает и такое.
vic_1
01.11.2024 10:23Ну можно вспомнить java в момент появления - gc, многопоточность, коллекции, ui, да много всего. Все было в java se на тот момент, поэтому такая популярность сейчас
qeeveex
Это не проблема языка, это проблема архитектуры. Большие и сложные тесты сигнализируют о том что у вас сильно связанный код. Одним словом - спагетти.
В самом языке из коробки поставляется тулчейн для тестов.
anton_shilin
Я согласен.
Большие и сложные они, сравнении с rspec. "Сложные" - для восприятия, на старте.