Микросервисная архитектура — это новый черный: кажется, уже все бигтехи пилят монолиты на сервисы и и ищут гошников в штат. Спрос рождает предложение — всё больше ребят переходят с других бэкенд-языков на 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)


  1. qeeveex
    01.11.2024 10:23

    Но вот тесты на Go писать не очень удобно, в отличие от Ruby: много заморочек, слишком сложные и длинные. 

    Это не проблема языка, это проблема архитектуры. Большие и сложные тесты сигнализируют о том что у вас сильно связанный код. Одним словом - спагетти.

    В самом языке из коробки поставляется тулчейн для тестов.


    1. anton_shilin
      01.11.2024 10:23

      Я согласен.
      Большие и сложные они, сравнении с rspec. "Сложные" - для восприятия, на старте.


  1. 1nd1go
    01.11.2024 10:23

    Какой богатый тулинг? :)) Как там драйвер постгреса подключается, напомните пожалуйста, и коннекшн пул делается?


    1. zavyrylin
      01.11.2024 10:23

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


  1. vic_1
    01.11.2024 10:23

    Говно это ваше го, Си 70 годов прошлого века. Язык должен приносить что то новое, что принёс го - нефига, 0 полный


    1. Alexis_Che
      01.11.2024 10:23

      Ок, что предложите? Что нового должен приносить ЯП?


    1. zavyrylin
      01.11.2024 10:23

      должен

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


    1. sdramare
      01.11.2024 10:23

      Подобный комментарий может написать только человек, который никогда в жизни не писал ни на С, ни на Го.


      1. vic_1
        01.11.2024 10:23

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


        1. sdramare
          01.11.2024 10:23

          Говно это ваше го, Си 70 годов прошлого века

          Го из коробки содержит - GC, поддержку динамического полиморфизма, интерфейсы, стекфулл корутины, каналы, слайсинг для векторов, юникод и ламбда-функции. Ничего из этого в С нет и вряд ли будет в ближайшие 50 лет. По-этому говорить об их схожести абсолютно невозможно.

          Язык должен приносить что то новое, что принёс го - нефига, 0 полный

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

          поверьте, никто из нашей команды не рвётся что писать на го

          С учетом что ваша команда состоит из людей, которые думают что между С 70х и Го нет разницы - охотно верю.

          поэтому периодически возникает необходимость миграции сервисом с го на джава

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


  1. vic_1
    01.11.2024 10:23

    Ну можно вспомнить java в момент появления - gc, многопоточность, коллекции, ui, да много всего. Все было в java se на тот момент, поэтому такая популярность сейчас