5 років на Go: що вміє ця мова, чого очікувати та чи варто переходити на неї

Привіт! Мене звати Євген Підвисоцький, я Senior Go Software Engineer у компанії SoftServe. Моя історія з Go розпочалася 5 років тому — тоді на вивчення мені знадобилася одна книжка та кілька місяців на практику. На щастя, її синтаксис і логіка дозволяють розібратися швидко. Особливо якщо до цього маєш досвід у розробці. Думаю, тому Go поступово приваблює все більше фахівців. Рейтинг мов програмування говорить, що у 2021-му вдвічі більше стало розробників, які обрали б Go для свого проєкту, у порівнянні з 2016 роком. Чим Go цікава, чому я перейшов на неї, як саме познайомився з цією мовою та чим відрізняється Go від інших, поділюся докладніше у статті.

У пошуках ідеальної мови програмування

Кожен оцінює мову програмування за різними критеріями. Клієнту потрібна та, яка допоможе створити рішення швидко, якісно, а також легко та недорого підтримувати його. Спеціалісту ж цікаво, з одного боку, щоб його послуги та робота мали попит, а з іншого — щоб була можливість виражатися, тобто легко та зручно втілювати ідеї. Так починається пошук універсального варіанта серед багатьох мов, які можна умовно поділити на старі та нові.

Переваги старих мов, яким понад 20 років, — багата бібліотека, велика кількість фреймворків і досвід, який за ними стоїть. Спеціалісти вже чудово знають сильні та слабкі сторони, для чого саме знадобиться C++, а де краще обрати щось інше. Проте за цим стоїть складність самої мови, моральна застарілість і тягар зворотної сумісності.

Молоді, як Go, Rust, Kotlin, навпаки, не знають тягарів та влаштовані простіше. Натомість клієнти не спішать ризикувати та використовувати малодосліджені мови для проєктів. Зі складнощами стикаються і самі розробники: бібліотека слабша у порівнянні зі старшими мовами. Однак у Go над цим триває робота з двох сторін. Перша — підтримка від Google, який вже інвестує сили та гроші на розробку мови та її бібліотек. Друга — розвиток завдяки ком’юніті. Це два паралельних процеси, які підсилюють один одного. Це допомагає Go конкурувати з іншими мовами та набагато швидше нарощувати базу бібліотек, що зазвичай вважається однією з основних переваг усталеніших мов.

Go цікава для клієнтів і тим, що потенційно на такий проєкт можна легко залучити спеціалістів. Адже поріг входження для Go нижчий у порівнянні з будь-якою з п’яти найпопулярніших мов програмування. Крім цього, швидкість розробки також відрізняється, на рішення на Go треба зазвичай значно менше часу.

Go: де використовують

Хоча Go відносно молода мова програмування, вона вже особливо добре проявила себе у Back-end web development, Desktop applications, Systems programming, оскільки чудово підходить для розробки розподілених високонавантажених систем. Можна сказати, що мова знайшла свою нішу, зокрема, завдяки багатству своєї стандартної бібліотеки. Наприклад, Go має вбудований високорівневий інструментарій для розробки web applications на відміну від багатьох популярних мов, де відсутність високорівневого API компенсована фреймворками. При цьому Go може вийти за межі своєї ніші, якщо з’являться доповнені або потужні third-party бібліотеки.

Моя історія Go

Я ознайомився з Go завдяки клієнту зі сфери консалтингу у 2016-му, а до того два роки працював на Java. На новий проєкт потрібні були Go-розробники, і пропонували вивчити Go для цього. Я вирішив спробувати себе, пройшов відбір на ретренінг-програму та почав навчання. Загалом якщо переходиш з таких мов, як Python, C#, Java чи інших мов-мастодонтів, то опанувати Go досить легко. В багатьох аспектах треба більше забути, ніж запам’ятати. Щоб мати базове уявлення про мову, достатньо пройти короткий тур на сайті Tour of Go.

Для основи теоретичної частини я обрав книгу «Програмування на мові Go» від Алана Донована та Браяна Кернігана. Вона виявилась доволі тонкою, точно не розміром з Біблію, як це буває з SQL, наприклад. Тож щоб зрозуміти базу, інструменти, треба опанувати сторінок 200. Для мене це зайняло два тижні, думаю, що цього часу достатньо для більшості розробників. Книга підходить для ознайомлення з Go не тільки фахівцям з досвідом, а й для інженерів, для яких ця мова буде першою.

Наступний етап ретренінг-програми — це практика. Так, протягом трьох тижнів я вирішував різні задачі на Go, які мені ставив ментор. Це допомогло набити руку та вже через місяць почати працювати на проєкті. Разом із ще кількома колегами, які пройшли ретренінг-програму, ми не тільки опанували Go з нуля, а й змогли реалізувати проєкт за 7 місяців.

Тож роудмеп вивчення Go буде простим: оберіть книгу, досить навіть однієї для старту, та використовуйте теорію на практиці. Можна спробувати писати свої проєкти та ділитися ними на GitHub.

Загалом вивчити Go — це більше плюс, адже можеш спробувати себе в інших проєктах. Причому вчити цю мову легко та швидко. Ретренінг-програма у цьому плані — ефективний спосіб, адже ти не самотужки сидиш за книжками, а й маєш підтримку від компанії.

Точки зростання

Перед вивченням, звичайно, треба зрозуміти й слабкі місця мови. Наприклад, у Go довгий час я був свідком жвавих дискусій щодо параметричного поліморфізму, тобто дженериків. Мову часто критикували за відсутність цієї функції, проте не всі були згодні додати її. Адже у такому випадку було важко знайти структуру, яка б працювала в Go та була максимально органічною у ній. Проте завдяки Яну Тейлору знайшовся спосіб, як впровадити параметризоване програмування. Так, у 2019 році Ян разом з Робертом Грізмером оприлюднив перший варіант змін на Gophercon, і вже у найближчих оновленнях має бути повноцінний запуск дженериків.

Ще один важливий аспект для бізнесу — не всі замовники готові використовувати для проєкту нові мови. Це пов’язано як з кількістю інженерів, які вміють програмувати на ній, так і з досвідом розробки. На Java створено мільйони проєктів, тому всім відомо, для яких розробок вона підходить найкраще, а де має недоліки та як їх виправляти. Go ще тільки набирається досвіду, тому деякі клієнти не хочуть ризикувати та обирають перевірені вже варіанти.

Чого чекати від Go: можливості

Усі слабкі місця — це й можливості для зростання. Тим паче, що Go має й значні переваги. Так, у цій мові є один спосіб розв’язання задачі та один стиль використання цього способу. Синтаксис відповідає цій ідеї — він простий і точний, не потрібно запам’ятовувати порядок написання, він дуже схожий на те, як ми читаємо текст українською. Головне у вивченні Go — зрозуміти синтаксис та філософію мови.

Одна з найкрутіших можливостей Go — це горутини (Goroutines). Завдяки їм, щоб виконати частину коду в паралельному потоці, достатньо огорнути його в функцію і додати Go на початку. Такі горутини можна запускати понад тисячу, а Go Runtime самостійно розподілить їх по системних потоках. При цьому є також зручний інструментарій для роботи з горутинами, що допомагає їх легко координувати.

Якщо розглянути Go у контексті об’єктноорієнтованого програмування, то вона базується на поліморфізмі через інтерфейси (єдина абстракція в Go) та композиції, що в Go реалізована як вбудовування, або embedding. Так, у Go немає наслідування, але цьому є розумне пояснення — ті патерни, що реалізовані за допомогою наслідування, також можна імплементувати через embedding. А оскільки філософія Go базується на одному способі розв’язання задачі та одному стилі використання цього способу, то розробники обрали також один принцип — вбудовування.

Ще з цікавого у Go — це інкапсуляція на рівні пакета. У цій мові ми можемо оголосити функцію/метод/змінну/структуру приватною на рівні пакета, написавши його ім’я маленькими літерами. І навпаки — якщо хочемо зробити публічним, то великими. У підсумку маємо лише два ідентифікатори доступу — приватний та публічний. Проте згадайте, як часто вам потрібні інші?

Ще одна перевага Go — багата стандартна бібліотека. Для прикладу, пакет «net/http» дозволить за кілька рядків коду підняти робочий вебсервіс, а в купі з пакетом «html/template» — реалізувати простенький, але повноцінний сайт за кілька днів.

Загалом за п’ять років у Go найбільше запам’яталося впровадження Go modules — нової нативної системи менеджменту залежностей. Вона прийшла на зміну таким third-party рішенням, як Glide.

Майбутнє Go

На Go вже створені цікаві проєкти. Наприклад, Docker — система для створення ізольованих віртуальних машин з будь-яким необхідним для тестування середовищем. Крім цього, 2014-го зробили Kubernetes, ПЗ для групового керування контейнерами на великому парку пристроїв. Загалом кожна мова має свої досягнення, але для такої молодої мови програмування, як Go, — це великий прогрес.

Перевага Go — це поступове зростання. Немає шаленого раптового попиту, після якого зазвичай настає стрімке падіння. Наприклад, деякий час на піку популярності була мова Groovy, зараз її вже мало хто згадує, вона згасла. Натомість Go розвивається іншим шляхом і навряд чи швидко втратить позиції. Якщо у Go якісно реалізують generic, то це буде сильний плюс, який привабить багатьох фахівців.

👍НравитсяПонравилось22
В избранноеВ избранном6
LinkedIn

Лучшие комментарии пропустить

Пишу багато на Go останні 3 роки. Дуже гідна технологія, але на мій погляд досить нішова, порівняно до більш мейнстрімових мов (Python, Java, C#, Javascript...). Go заняла своє місце в розробці хмарних / serverless мікросервісів, подекуди в Embedded як заміна C. Їй написали Kubernetes, Docker, CocroachDB, Prometheus й інші схожі проєкти, які повинні бути мати високий перформанс, активно працювати с мережою, вимагають concurrence і parallelism, і які боляче писати цілком на C / C++. Тим більш що якісь C бібліотеки можна інтегрувати через Cgo, якщо прям дуже потрібно.
Але поза цими (більш винятковими ніж традиційними) випадками використання, коли починаються різноманітні традиційні web застосунки, корпоративні системи які не занадто навантажені, але мають багато CRUD і форм — стає більш боляче використовувати Go, ніж мейнстрімову мову + популярний фреймворк типа Spring, Rails, Express.js і т.п. Не кажучи вже про кількість фахівців і (в деяких випадках) бібліотек.
Можно працювати довгостроково на Go, але на мою думку, вона не повинна бути єдиною технологією в арсеналі. Потрібно знати якнайменш іще якусь мову / мови + фреймворк, і знати де використовувати Go, а де ні. Якщо навмисно обмежувати себе тільки Go, то буде значно менший вибір вакансій.

Довгий час в мене був love-hate relationship з go, але зараз воно змістилось в сторону strong love:
— нативна швидкість виконання, ніяких інтерпретаторів чи віртуальних машин
— ...помножене на конкурентність через корутини, яка дозволяє максимально задіяти ресурси процесора
— аскетичне використання пам’яті
— потужна стандартна бібліотека, і ще тона бібліотек на гітхабі
— розвинений тулінг: профайлери, лінтери
— семантика мови допомагає писати зрозумілий код, який виглядає однаково у різних членів команди. мамкіни рок-зірки з «зацінить мій однострочник» не пройдуть, я вже пробував не раз.
— err != nil хоч і болючі, але вживані правильно роблять код зрозумілішим, бо зрозуміло звідки може вилетіти помилка.

— Найголовніше: дженерики _вже_ змержили в мастер, тому після наступного офіційного релізу мова стане на порядок крутіше ;-)

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Я б додав, що Go — це не тільки мова, це ще й правильний і зручний шлях від девелопера до DevOps/Cloud інженера ;))

Як показує досвід — це наспраді дуже гарно, коли девопс інженерами стають саме професійні розробники) особливо Go-розробники, тобто ті кому поприколу писати якісний код))

Спасибо за статью!
Я писал на Go пару лет после почти 10 лет на дотнете. Это просто небо и земля. После Go мне дотнет кажется тяжелым старым монстром.

Go намного лучше для современной microservice архитектуры. Очень легкий, быстрый язык со статической типизацией и static linking.
Мне очень понравилась система управления зависимостями (go modules), стандартный фреймворк для тестов, стандартное форматирование и линтер, goroutins и channels.

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

Смешно видеть сравнение Go с Python в котором Global Interpreter Lock или сравнение с JavaScript в котором можно прибавить null к сосиске и получить 1

Шансы, конечно, высоки, как и нарваться на проблемы, которые начинаются изрядно раньше кровавых энтерпрайзов medium.com/...​icroservices-1cda360c6c1c

прибавить null к сосиске и получить 1

ще один цікавий проект створений на Go — github.com/portainer/portainer — тула щоб менеджити контейнеризовані середовища такі як докер, докер сварм, кубернетес, тощо. я теж зараз вчу Go і часто читаю звідти код.

было бы неплохо укаывать с какой языка перешел на го, помню эпопею с руби когда руби пиараили со всех утюгов. Руби был хорош если человек на него смотрел из рнр. Те кто сидел на джаве или дот нете руби был ну такое никакого вау там нет. Просто клиентам вс уши прожужжали про «скорость разработки», да скорость разработки c mvc подходом выше если сравнивать с asp.net web forms, но когда я начал смотреть руби в дотнет уже вводили mvc и смыла как бы не увидел в руби вообще. С тех пор как то скептически смотрю на все ново-языки.

Дуже багато спекуляцій у коментарях. Для тих кому дійсно цікаво про стан речей із тим, як стрімко, які «ніши займає» та наскільки популярна мова Go

Доклад від Google, Грудень 2020

youtu.be/uMqosPm7BPQ

23 min 48 sec

Профессор Преображенский, умоляю — зайди в чат 🤦‍♂️😢

вмовив , таки не буду дивитись

«Смотри, уж ты хрипишь, а он себе идет
Вперед
И лаю твоего совсем не примечает»

Числені баги у Kubernetes кажуть що дива не сталось. Go чергова мова програмування — а не панацея від програмування у зжаті строки без належного тестування. Хоча мова чимось є цікава.

1) куб це такий трошки монстр, до якого і підступитись то не просто так. тому цене дуже файне зауваження.
2) тестування в го. це first-class citizen.

мова комусь цікава, комусь ні.

Будь-який софт має баги, які є результатом роботи дуже конкретних розробників: кожного з нас, якщо ви займаєтесь розробкою звичайно...

k8s — це унікальна і дуже складна система, яка не має анагалоів і дуже якісно вирішує ті задачі, задля яких була створена.

«кажуть що» — це не дуже професійний аргумент, особливо, якщо ви особисто не створили нічого значущого, щоб принайми згадувати про результати роботи інших людей, навіть, якщо ці результати, на вашу думку — мають «численні баги»

«кажуть що» — це не дуже професійний аргумент, особливо, якщо ви особисто не створили нічого значущого, щоб принайми згадувати про результати роботи інших людей, навіть, якщо ці результати, на вашу думку — мають «численні баги»

о-о-о, «спєрвадобейся» вже пішло у хід...

Сперва — подумай: очень рекомендую

Що ви розумієте під «значущім» ? Скажімо якщо я приймав участь у розробці у низьких найбільших британських інтернет магазинив — це рахується ? Чи «значуще» це розпіарений проект який потім куплять ті самі інтернет платформи ? Між іншим продукт я теж робив, і його купили мало не усі фанги і низька відомих компаній. Із кубернетісом працюю не за своїм бажанням на амазоні екс, і сиджу дивлюсь в ленс — раптом под знову не стартує бо чомусь щось зломалось. 2. Кейтс далеко не такий вже і унікальний — подивіться на рішення від jboss і vmware.

Значущими у цьому контексті, мається наувазі — аналогічні за складністью системи, як кубернетіс: спроектовані чи/та реалізовані вами в значному обсязі або принаймі бути загальновизнаним фахівцем у цьому домені. Kubernetes — це дуже далеко від Інтернет магазинів, при всій повазі до роботи, яку ви, чи ваша команда робила у цьому напрямку...

«Щось зломалось» — це у 99.9% не у кубі. Або в конфігах ворклоада/конфігурації ресурсів хмари необхідних для функцінування кластера або певні проблеми із налаштуванням CNI/CDI/Ingress-компонентів, які є по факту — плагінами створеними PaaS провайдерами (або ще кимось). І це нормально, такі речі трапляються із різними системами... Потрібно розбиратись власноруч або вести обговорення у деталях, якщо на такі проблеми вже посилаєтесь у пабліку.

Розробка та підтримка ПО — це в цілому дуже складний процес, який потребує кваліфікації та постійного вдосконалення, в тому числі і вивчення нових систем та технологій, таких як Go чи Kubernetis, якщо у цьому є потреба. Чи потрібно це всім і кожному — звичайно, що ні.

На мій суб’єктивний погляд, основна притензія до ваших коментарів в тому, що це зовсім не конкструктивна критика (при тому, що стаття взагалі не про «умовні баги» в «умовних програмах»), а щось на рівні «ловіть смердючій подарунок із мого вальєру»... Це виглядає дуже непрофесійно та дуже неочікувано від людей наче досвідчених у розробці (та навіть у керуванні командою розробки) вести діалоги у такому ключі.

Певно ви маєте на увазі jBoss Application Server — назва говорить сама за себе. Це дещо схоже але не є оркестратором кластера контерезованих додатків за домогою набору абстрактних ресурсів, які описують певний стан системи, до якого куб буде намагатись привести ворклоад.

Кубернетіс умовно — це автоматизація автоматизації...

Що малось вами на увазі під рішенням від vmWare не буду гадати. Додам лише, що популярність куба обумовлена у значному тим, що це опенсорс і якщо хтось знайшов «численні баги» — feel free to rise a PR and contribute the fixes...

Так, звичайно існує велика кількість більш легковесних рішень для невеликих проектів. Кожна задача потребує своїх підходів: не потрібно стріляти по горобцях із базуки...

Це все куб також))

Ми мігрували успішно з PHP (symfony) на Go (Echo) один web customer faced проект з мільйонами відвідувачів за місяць. Після цього більше немає бажання використовувати PHP для веб застосунків))

Через специфіку даних, ми використовуємо графічну БД, яка має своє Go API. Але якщо шукати альтернативу doctrine, то GORM буде найблища.

ми використовуємо графічну БД, яка має своє Go API

и што оно такое?
дай ссылку плз — интересно

Згадав ще пару мінусів (хоча, для когось це може й плюси) Go.
1. В Го тусовці нереально багато всякого роду трапів та інших представників радуги. Нереально дофіга.
2. Якось збирав якусь невелику подєлку (не можу згадати, що то було) і воно накачало 100500 модулів, половина з яких взагалі не повинна була би відноситися до проекту (умовно, клієнт до якоїсь СУБД). Таке враження, то то був не Go а JS.

1. В Го тусовці нереально багато всякого роду трапів та інших представників радуги. Нереально дофіга.

Почему вы так говорите будто это что-то плохое?

«скрепи» не відпускають напевно

Я ж написав, що для когось це може бути плюсом.

Стосовно п.2 — ви однозначно не дуже розумієте яким чином і навіщо в mod-файлах будується дерево УСІХ (включаючи залежності прямих імпортів).
Більше власного коду — меньше залежностей і це не проблема мови-інструменту, а проблема якості рівня розробників у конкретному проекті.

p.s. Гомофобний пункт 1. взагалі потребує уваги адмінів ресурсу...

Ой, вей. Рекомендую забанити.

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

Назвеш ще одну мову де на оф. сайті БЛМ банер?

Из первого что приходит на ум — на сайте ReactJS был баннер (убрали недавно), также можно вспомнить историю с master/slave в python, GitHub который поменял корневую ветку с master на main

Ну больних з master то да. ReactJS то ж не мова. Ну тенденція кругом нездорова. Просто, у мене враження, що Го в голові колони.

Пишу багато на Go останні 3 роки. Дуже гідна технологія, але на мій погляд досить нішова, порівняно до більш мейнстрімових мов (Python, Java, C#, Javascript...). Go заняла своє місце в розробці хмарних / serverless мікросервісів, подекуди в Embedded як заміна C. Їй написали Kubernetes, Docker, CocroachDB, Prometheus й інші схожі проєкти, які повинні бути мати високий перформанс, активно працювати с мережою, вимагають concurrence і parallelism, і які боляче писати цілком на C / C++. Тим більш що якісь C бібліотеки можна інтегрувати через Cgo, якщо прям дуже потрібно.
Але поза цими (більш винятковими ніж традиційними) випадками використання, коли починаються різноманітні традиційні web застосунки, корпоративні системи які не занадто навантажені, але мають багато CRUD і форм — стає більш боляче використовувати Go, ніж мейнстрімову мову + популярний фреймворк типа Spring, Rails, Express.js і т.п. Не кажучи вже про кількість фахівців і (в деяких випадках) бібліотек.
Можно працювати довгостроково на Go, але на мою думку, вона не повинна бути єдиною технологією в арсеналі. Потрібно знати якнайменш іще якусь мову / мови + фреймворк, і знати де використовувати Go, а де ні. Якщо навмисно обмежувати себе тільки Go, то буде значно менший вибір вакансій.

Дякую це дуже корисний коментар.

В каркасі Gin є мапінг форм в структуру bind form-data request with custom struct

Кодогенерації CRUD можна пошукати, або спробувати grpc-web (github.com/grpc/grpc-web)

Напевно, погоджуся з тим, що у Go є своя ніша, але не думаю, що він стане таким же популярним, як C, С ++, Java або Python

це залежить від багатьох факторів у тому числі і людського. Все може бути)

Що може змусити людей перейти з Java, C #, Python, Kotlin і т.д. на Go?

Деякі не переходять, а додають Го до арсеналу. Деякі переходять повністю, я знаю багато прикладів по Java. Причин тому може бути безліч. Наприклад формат проектів які стартують на Go, швидкість розробки, зручність кодінгу, робота з concurrency (так інструменти є в кожній, але настільки зручного в жодній ІМХО). Як швидко люди починають робити профайлінг в інших мовах? В Го я робив з першого дня, бо аін вбудований і зручний. Тут мені здається треба спробувати і вирішити для себе. Я потенційно не виключаю завойовування лідерстких позоцій, як і не виключаю що будь хто з нас може стати справді видатним. Знову ж таки це тільки моя думка, вона може різнитися з Вашою і це добре.

додають Го до арсеналу

відбувається набагато частіше ніж

переходять
швидкість розробки, зручність кодінгу

Оце поняття дуже відносні і як вже писали вище — у сфері веб додатків го просто програє і по першому і по другому параметру

Як швидко люди починають робити профайлінг

Як тільки з’являється необхідність, якщо у тебе з першого дня використання го з’явилась необхідність у профайлінгу — то може го не найкращий вибір?

Я потенційно не виключаю завойовування лідерстких позоцій,

А я б виключав, бо для завоювання лідерства го повинен стати або новою джавою або новим пітоном, у будь якому випадку виникне питання а нафіга воно потрібно?

Ви володієте такою статистикою і знаєте що люди частіше додають го до арсеналу аніж переходять на нього? Я наприклад знаю більше людей які перейшли на Го. Профайлінг використовують не тільки для пошуку проблем, а й для того щоб зробити код ще кращим.

статистикою

особисті спостереження

щоб зробити код ще кращим

Справді? Я чомусь вважав що профайлінг використовують для пошуку «гарячих» ділянок коду для наступної оптимізації цих ділянок.

Дякую всім хто перечитав статтю та навіть залишив коментар. Знаю не всім вона сподобалась та вірю що знайдуться ті котрих ця мова зацікавить хоча б спробувати пописати на ній. Далі як то кажуть діло техніки. Молодому поколінню або ж людям котрі вирішили спробувати себе в IT, бажаю набратися впевненості незважаючи на купу «страшних» слів якими огорнули цю сферу, 90% задач які вирішують программісти сьогодні не виходять за рамки лінійної алгебри, тому wellcome. (Тільки англійський підтяніть!).Ще раз скажу, моя персональна думка, на яку кожен має право, го — це хороша мова для старту, а переходити на неї з іншої чи ні, діло і особистий вибір кожного.

Поясни будь ласка чому ?

го — це хороша мова для старту

А не Python який скрізь в універах викладають, чи не JS який зараз скрізь.

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

Дивлячись на вакансії Ви ніколи не дізнаєтесь куди рухається ринок, Ви бачите його current state. Якщо Ви на данний момент уже добре знаєте Python чи JS, тоді нема питань, заходьте на тому що у вас є. Також раджу визначитись з напрямком який Вам більш цікавий frontend чи backend. JS на фронті поза конкуренцією тому і мук вибору ніяких.
Щодо Го, я висловлюю виключно свою думку, базуючись на досвіді і на тому як ситуація з попитом на спеціалістів змінювалась з часом. Я не можу стверджувати, що попит на го спеціалістів через рік зросте вдвіччі, я не оракул, але можу сказати що попит зростає. Особисто для мене, сама мова має більше значення ніж попит на неї, звісно я не можу повністю ігнорувати актуальність, попит і все таке, але го в першу чергу мова на якій приємно писати.

Дивлячись на вакансії, ти розумієш що ринку потрібно зараз.
А якщо не подобаються вакансії, подивись рейтинг TIOBE зараз — Python вверх, Go вниз. І це при тому що і зараз відсотково вони на порядок відрізняються не на перевагу Go.
Ти висловив думку, щодо Go. Запрошуєш на неї перейти, от я і прошу «обоснуй», «доведи». Я з задоволенням погоджусь і перейду на неї якщо аргументи переконають.
Java показала 2 х кратний пост вакансій, за останні 2 роки, то саме в Python і JS. В Go такого і близько не видно, міжнародні рейтинги кажуть те саме.
Якщо ти знаєш щось інше, крім «мені подобається», поділись.
Я навпаки бачив інше, пропонували іти на проекти з безкоштовним навчанням Go з повною зарплатою, аби набрати людей. І ніхто не погоджувався після аналізу ринка. Вдумайся, люди не готові іти і безкоштовно вчити інструмент бо не розуміють де він потім знадобиться крім того самого проекту.
Мова це ж тільки інструмент, нема різниці на чому писати, аби тільки інструмент відповідав завданню і на нього був попит.
Форум читають різні спеціалісти і ті хто тільки збираються мову вчити і ті хто писав на Х мовах.

Ти просиш мене обгрунтувати чому Го буде збільшувати свою частку ринку? Чи які переваги вона має як мова для старту?

Прошу обгрунтувати свою думку. В тебе є обидві, обирай сам. Якщо звичайно є аргументи.

TIOBE показує втрату позицій з 11 на 14, окей це нормально тренд не може бути постійно вверх. Та давай поглянемо хто над Go в рейтингу, по скільки їм років? Найближчий Ruby 95-го року народження на секундочку. Про інших взагалі мовчу.

Хіба я десь казав що Го є найпопулярніою мовою сьогодення? Я казав про її перспективи і перерахував її сильні сторони у статті, Yury Gavrilenko доволі гарно добовнив мене у коментарях (це на рахунок аргументації). Для мене мова не релігія, щоб когось переконувати, це вибір кожного.

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

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

Открыл вкладку работа — вакансий Java 600 VS Go 60. Когда порядок с 10 сменится хоть до 2, можно подумать про язык. А пока спасибо за обзор.

Само собой, Украина в технологическом плане отстаёт лет на 5. У нас по прежнему на пхп проекты стартуют серьезные. Поэтому лучше судить о росте популярности языка за бугром, если мы говорим об оценке его «будущего». Если про «здесь и сейчас», то да, го еще не сильно популярен.

А якщо не подобаються вакансії, подивись рейтинг TIOBE зараз — Python вверх, Go вниз. І це при тому що і зараз відсотково вони на порядок відрізняються не на перевагу Go.

а я бы вам предложил посмотреть на статистику по пулл реквестам. там совсем другие цифры, чем по запросам «как мне поднять джангу?»
madnight.github.io/...​ut/#/pull_requests/2021/1

Открыл вашу ссылку — Go идет вниз.

По этой же ссылке за посл. 5 лет с 8 на 4 место поднялся, да идет вниз не слабо.

Го лучше чем пхп только в плане языка. В остальном полный провал. А если сравнивать с Java//NET то непреодолимый провал.

аргументированная критика, ничего не скажешь :)

Мне нужно для начала ORM (желательно 2 штуки чтобы было из чего выбрать) с кучей жирных фич чтобы безотказно работали с 5 самыми распространенными субд. Нужна либа, чтобы создавать Excel документы низкоуровневая и высокоуровневая. Промышленные либы для репортинга. В Го все это есть?

Еще один каличный язык для написания дешевых скриптиков? Все вышеперечисленное и не в единственном экземпляре присутствует в уже заматеревшем виде в Java/.NET.

Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова... Пользователь может играть лесными эльфами, охраной дворца и злодеем. И если пользователь играет эльфами то эльфы в лесу, домики деревяные набигают солдаты дворца и злодеи. Можно грабить корованы...
:)

Сразу видно Димон в кровавом энтерпрайзе работает с Ораклом и Ексель файлами =)

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

Само собой. Этот инструмент создан для того чтобы какой-то скриптик для парсинга чего-либо написать или микросервис сбоку где-то присобачить строк на 400-500.

шото многовато,
100 строк, ну ладно, два екрани...

Почему? Го возник в определенной среде на бэкенде, и прекрасно справляется со своими задачами. Я сам .net backend, работал на проекте где 50%-50% сервисы на .net общались с сервисами на Go. Мне он зашел, потому что его фактически учить не надо — и так все понятно, т.е. он довольно интуитивный.

Другое дело, что он вряд ли станет универсальным языком для всего-всего как java\.net, тем не менее в своем домене он хорош.

На щастя, її синтаксис і логіка дозволяють розібратися швидко.

Ложь. Язык простой да писать не просто. А ещё непрощее колупать уже написанное продираясь сквозь сотни if err != nil и так далее и тому подобнее без каких-либо возможностей зафиксировать контракты в типах.

Rust, Kotlin, навпаки, не знають тягарів та влаштовані простіше.

конкретно вот эти 2 ещё как имеют связь с С лигаси а второе — это джава в трусиках и по сути ничем своим хорошим, убийцами спринга не обросла, а со скалой они воюют, да и прочая андроидятина там корая есть — то ещё лигаси

підтримка від Google, який

относится ко всем разрабам не самым лучшим образом.

Адже поріг входження для Go нижчий у порівнянні з будь-якою з п’яти найпопулярніших мов програмування.

ну, с JS и Питоном там нужно потягатся. Статья на vc.ru состоит во многом из спорных, сомнительных тезисов. А бизнес охотится потому что написать код на го — просто, а сделать так чтобы он работал и не ломался это достаточно сложно.

Systems programming, оскільки чудово підходить для розробки розподілених високонавантажених систем.

GC — System programming. Пойдите напишите товарищам которые руками статически размечают всю память на С, что этот подход — говно и надо делать с гц. розподілених високонавантажених систем. ГЦ и лейтенси это отдельный анекдот. В го нельзя управлять гц и его паузами, единственный способ выжать маленькую лейтенси с высоким персентилем это ничто иное как отключение того самого гц. В общем, го магическим образом ничего не облегчит, вам нужно будет воевать с языком как и всюду.

Причому вчити цю мову легко та швидко.

Да, ведь язык сам по себе почти ничего не предлагает

спосіб розв’язання задачі та один стиль використання цього способу. Синтаксис відповідає цій ідеї — він простий і точний, не потрібно запам’ятовувати порядок написання, він дуже схожий на те, як ми читаємо текст українською.

один способ решения задачи = отсуствие вариативности, а то что го предлагает, не затычка во все дырки, фу таким быть. Синтаксис не простой и точный а топорный бойлерплейтный. Я так и вижу в текстах месиво из скобочек и if err != nil

найкрутіших можливостей Go — це горутини (Goroutines). Завдяки їм, щоб виконати частину коду

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

Такі горутини можна запускати понад тисячу, а Go Runtime самостійно розподілить їх по системних потоках.

тредпулы, гринтреды есть почти всюду, даже в жвм будут в луме.

на одному способі розв’язання задачі та одному стилі використання цього способу, то розробники обрали також один принцип — вбудовування.

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

багата стандартна бібліотека.

тоже есть почти всюду

реалізувати простенький, але повноцінний сайт за кілька днів.

вы знаете толк в извращениях

Go modules

есть почти в любом языке

навряд чи швидко втратить позиції.

 да потому что у зумеров фаанг головного мозга, и то что юзают в гугле обязательно нужно юзать за его пределами.

generic, то це буде сильний плюс,

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

У Вас не повне уявлення про цю мову, тому б радив би більш детально познайомитись з нею тоді більшість «проблем» перерахованих розчиняться в повітрі. І не обовязково вносити в дискусію стільки негативу, софт скіли набирають все більшу вагу у оцінці Вас як спеціаліста. Всього найкращого.

тому б радив би більш детально познайомитись з нею тоді більшість «проблем» перерахованих розчиняться в повітр

Я имел «удовольствие» ковырять вот это: github.com/ethereum/go-ethereum и вот это github.com/...​e/master/services/horizon

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

тоді більшість «проблем» перерахованих розчиняться в повітрі

Я не представляю как расстворить в воздухе объективные проблемы

підтримка від Google, який

относится ко всем разрабам не самым лучшим образом.

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

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

є дещо магічне в го-ком‘юніті — багато років тому багато го-фанів доводили, що дженеріки не потрібні і що так нормально. Потім я звик, що вони так фанатично тримаються за цей постулат. Пайк і ко. сказали, що так правильно. Час пройшов, і я впевнений, що найбільш ярі
анти-джерерик-адепти зараз перефарбуються і так само будуть кричати «вау, яка класна фіча».

Не «дженерики не потрібні», а без дженериків можна обійтись. Власне чудово обходились, але нарешті придумали як їх грамотно впилять, щоб зробити краще аніж вже було.

я щиро радий, що вони нарещті потряплять в v.1.18. Цікаво чи з‘являться нові колекції в стандіртній лібі і т.д.

лише два ідентифікатори доступу — приватний та публічний. Проте згадайте, як часто вам потрібні інші?

«Інші» — це «protected»? Якщо у вашій мові немає наслідування, то не згадаєте, бо його там немає до чого прикласти.

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

Хайп вокруг го уже давно прошел и он занял ту скромную нишу для которой и предназначем.
Уже и вокруг раста хайп проходит

на рахунок Руста, ти погарячкував

Golang — only good stuff from C/C++, Pascal, Python.

error: Golang language not found

sudo ln -s /usr/local/go/bin/go /usr/local/go/bin/golang
golang version
go version go1.17.1 linux/amd64

$ go version
go version go1.16.4 linux/amd64
$ sudo ln -s /usr/local/go/bin/go /usr/local/go/bin/golang
ln: failed to create symbolic link ’/usr/local/go/bin/golang’: No such file or directory
$ which go
/usr/bin/go

Я використовував офіційну інструкцію golang.org/doc/install

rm -rf /usr/local/go && tar -C /usr/local -xzf go1.17.1.linux-amd64.tar.gz

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

А вы вообще разработку ведёте под Линуксом, или под WSL?
Я лично весь полностью процесс веду под Вендой, а linux вижу только в контейнерах.

Фу, ставити софт в обхід пакетного менеджера. Я таке стараюся не практикувати. :)

То зрозуміло, але з sudo apt-get install golang встановлюється якась застаріла версія

Останнім часом цікавлюся Ґо, як альтернативою C#, бо решта хайпових мов так і близько не зацікавили.

Го вивчити настільки просто як 2 пальці обісцяти

Та ясно. Просто там вже й «обвіс» з’явився, у вигляді фреймворків для вебів різних :-)

так вам шашечки чи їхати?
взагалі кравий аутсорц вна неньці із вимогами «спеціаліст з 5років досвідку закручування гайки М10» рулить

Ага... Ну то таке. Все одно в Україні скоріше працюватиму на дотнеті :-) а то вже як десь зберуся, тут Go і зарадить :-)

5 років на Go

От звонка до звонка?

Від себе додам, що Go — технологія, яка повертає до того магічного відчуття, яке виникає від процесу розробки... Killer apps: kubernetis та docker вивели на новий рівень бекенд розробку та життєвий цикл розподілених та серверних систем... Everybody have fun and join us! 💪

та ладно, ЛС сказав що я трейні в Гошці

Перепрошую, не дуже зрозуміло, яким чином це має відношення до мого коментаря?

Ааа, зрозуміло)), так я пишу на Go з 2015 і мені дуже покайфу))

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

магічного відчуття,

мова була про магічне віддчуття після співбесіди на Го проект, коли тобі написав інтерв"ювер — трейні

Друга — розвиток завдяки ком’юніті.

Спільнота гоферів в Україні GolangUA

А меня в свое время golang загнал в ступор свои вариантом стандартной сортировки, правдо это было давно,может сейчас все поправили

Какой из них?
yourbasic.org/...​golang/how-to-sort-in-go

Подозреваю, что вариант с имплементацией своих методов. Но Благо есть sort.Slice

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

В цілому Го мені й дуже подобається і пишу періодично на ньому з 2010 чи 11-го, але оце «за вихідні освоїв і запилив проект» не працює на практиці. Воно працює лише в Гуглі, де ти прийшов нуб і йому в ПР підказали як правильно та ідіоматично писати код. А так, всі проекти, що я бачив на Го виглядали як повне гімно, бо туди чого тільки не понатаскували, і всяких Service з Java, і snake case. В більшості то були просто жаба-проекти написані на Го.
Сильно нагадує, як у нас в класі був двієшник, так вчителька йому дозволяла в зошиті писати кирилицею, аби він їй не заважав. Щось типу «Хом ворк. Хау ай спенд май самер.»

А так, всі проекти, що я бачив на Го виглядали як повне гімно, бо туди чого тільки не понатаскували, і всяких Service з Java, і snake case. В більшості то були просто жаба-проекти написані на Го.

Це стосується будь якого переходу з одної мови на іншу.

В масштабі одного індивідуума так, але в масштабах спільноти все не так просто. В кожній спільноті вже є колективний досвід набутий роками. Взяти той же Пітон, там таких масштабів не спостерігається. Та й в Хаскелі ніхто service factory не пише. Так що, ситуація кругом різна. Можливо, з часом ситуація виправиться.

50/50, если ты мыслишь ООП стандартами, то сложно конечно на старте, но потом легчает, правда есть специфика после тех же java/python/C++, но в целом язык живет и не только за пределами google и он создавался для быстрого перехода в google от python -> go

Не зовсім. Він не створювався як заміна Пітона. Навпаки, це був С++ але простіший, С але безпечніший. Пайк сам постійно дивувався, чого його сприйняли як заміну Пітона та PHP.

Та й в жаба-проектах від ООП лише назва. *Service та безліч утилітних класів про це яскраво свідчать.

50/50, если ты мыслишь ООП стандартами, то сложно конечно на старте, но потом легчает, правда есть специфика после тех же java/python/C++

Специфика в том, что в Go, как и в скриптовых языках типа Lua, js код можно строить на замыканиях. Если в С-подобных плодят классы повсюду, то тут много кода можно уместить в замыкания.

Go, ... код можно строить на замыканиях

давай, наваяй,
цікаво порівняти із Рустом

Підкажіть приклади ідеоматичного Го в мікросервісній архітектурі.
www.gobeyond.dev/standard-package-layout не поширений.

Чесно кажучи, не зовсім розумію питання. Що значить ідіоматична мікросервісна архітектура? Чим мікросервіс від макросервіса відрізняється?

Гарна стаття!

Я б додав про ключові точки розвитку. Щось на зразок getpocket.com/read/2715517422

Довгий час в мене був love-hate relationship з go, але зараз воно змістилось в сторону strong love:
— нативна швидкість виконання, ніяких інтерпретаторів чи віртуальних машин
— ...помножене на конкурентність через корутини, яка дозволяє максимально задіяти ресурси процесора
— аскетичне використання пам’яті
— потужна стандартна бібліотека, і ще тона бібліотек на гітхабі
— розвинений тулінг: профайлери, лінтери
— семантика мови допомагає писати зрозумілий код, який виглядає однаково у різних членів команди. мамкіни рок-зірки з «зацінить мій однострочник» не пройдуть, я вже пробував не раз.
— err != nil хоч і болючі, але вживані правильно роблять код зрозумілішим, бо зрозуміло звідки може вилетіти помилка.

— Найголовніше: дженерики _вже_ змержили в мастер, тому після наступного офіційного релізу мова стане на порядок крутіше ;-)

err != nil

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

Загалом за п’ять років у Go найбільше запам’яталося впровадження Go modules — нової нативної системи менеджменту залежностей. Вона прийшла на зміну таким third-party рішенням, як Glide.

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

Это потому, что модульная система более-менее сформировалась к версии 1.16, меньше чем год назад. А проекты, ставшие серьёзными — стартовали раньше. Да и мало ли, вдруг авторы библиотеку дропнут.

Або перенесуть в інший репозиторій та відповідно перемейнують, так сталось з github.com/kshvakov/clickhouse

block не швидше + більш ближче до чистого html ? (github.com/kataras/blocks)

Вообще не нужно, сервер может просто раздавать статический контент из кэша, как CDN, а все модификации уже будут происходить на стороне клиента через js.

Этот совет хорош, если не нужно, чтобы контент индексировался в гугле :) Но проще прописать в robots.txt вот такую штуку:

User-agent: *
Disallow: /

Подписаться на комментарии