Golang: особливості технології й 5 кроків для вивчення

Привіт! Мене звати Рахман Мустафаєв. Я працюю Full Stack Software Engineer (Go) в компанії Innovecs. Живу в Азербайджані. Вже близько п’яти років займаюся програмуванням. Спочатку писав на Java, C#, але потім вирішив вивчати Golang. За допомогою цієї технології можна виконувати ті ж завдання, що і завдяки мовам OOP.

Чи доцільно порівнювати Go з C++ і Java, як використовується технологія та як її вивчити — розповім у цій статті. Матеріал буде цікавим першою чергою новачкам, які цікавляться мовою Go і планують її освоювати. Буду вдячний і за коментарі тих, хто вже давно пише на Go і також може поділитися своїм досвідом.

Популярність мови Golang: Go ahead, bye the rest :)

Відповідно до дослідження DOU технологія Go займає 10-те місце у рейтингу найбільш популярних мов програмування у 2022 році. Іноді Golang навіть помилково використовують з C, C++. Технологія С вже використовується з 1970-х років, а С++ використовується з 1990-х. У порівнянні з ними Golang — це нова компільована багатопотокова мова програмування, яка з’явилася у 2009 році. Набагато пізніше, ніж Java, C#, C, C++.

Також варто взяти до уваги, що мови С, С++ переважно використовують для мікроконтролерів та low-level programming. Там немає Garbage Collector — програміст сам цим займається. У результаті девелопмент найпростіших програм займає дуже багато часу. При цьому можна легко помилитися. Звісно, С, С++ швидші, ніж Golang. Але їх треба довше вивчати.

Тож усі перераховані фактори сприяють тому, що ком’юніті нової мови зростає щороку. До того ж частина з тих, які користувалися Python, переходять на Golang, тому що на ній швидше і легше писати. Хоча, як відомо, Python вважається найзручнішою та найдинамічнішою мовою програмування.

Ще одна причина, чому Go завойовує все більшу популярність — наявність go fmt — інструмента, який допомагає стандартизувати код. А використання go vet допомагає знайти можливі проблеми у коді. Іншими словами, автори мови Go спробували максимально спростити завдання розробки застосунків цією мовою, особливо для новачків. Саме тому багато хто зараз вважає Go однією з найкращих мов програмування.

Треба визнати, що популярність мови великою мірою залежить від домену, з яким працює програміст. Якщо він розробляє web applications, то у цьому випадку найбільше використовується JavaScript. Тим більше, що володіючи цією технологією, можна легко перейти з фронтенда на бекенд. Але якщо вам потрібна multipourpose-технологія, то звичайно, Golang значно краще, ніж JavaScript або C#, на якому писати складніше. Здебільшого на Java не пишуть нові проєкти, а legacy projects, які тільки підтримують.

Універсальна технологія: для чого і як використовують Golang

Компанія Google створила цю мову для розв’язання проблем з продуктивністю та загальним уповільненням процесу розробки. Велика складна кодова база корпорації згодом почала давати збої — керівництво ухвалило рішення створити нову мову, яка б орієнтувалася на швидкість та простоту. Розробкою Golang займалися досвідчені фахівці — Роберт Грізмер, Роб Пайк та Кен Томпсон, які створили до цього операційну систему Inferno.

Початковим завданням Go було розв’язувати внутрішні проблеми Google, але мова швидко набула всесвітньої популярності, і її почали активно використовувати. В основному технологію застосовують для low-level programming.

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

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

Утиліти та мікросервіси

На Go зручно та комфортно писати консольні утиліти, мікросервісні програми для розподілених систем. Go зі своєю кросплатформністю підходить і для написання застосунків.

Деякі компанії використовують Golang для файлівської системи. З їхнього досвіду це навіть швидше за FS-клієнт, який використовує Windows і за FAS, який використовує Linux.

Go дуже швидка та споживає мало пам’яті. І це якраз те, що треба, коли йдеться про організацію спільної роботи користувачів на різних комп’ютерах. Програми Go працюють швидше завдяки нативній компіляції. Багатопотоковість вбудована в мову нативно і без зовнішніх «костилів», код легко пишеться і модифікується. Саме тому багато компаній переводять свої сервіси на цю мову.

Фінанси та хмарні обчислення

У 2020 році більшість програмістів Golang, крім сфери IT-послуг, працювали у сфері фінансових технологій та хмарних обчислень. Банки використовують Go для побудови масштабованих клієнтоорієнтованих сервісів з меншими витратами на інфраструктуру.

Програми для DevOps

Все частіше Golang програмування використовують у DevOps. Завдяки технології можна створювати зручні та потужні програми для вирішення завдань, пов’язаних з обробкою великих обсягів даних. Також застосовують для аналізу статистики, обробки даних, створення різних парсерів, блокчейн-проєктів.

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

Швидкі та ефективні версії повільних програм

За останні роки кількість програм на Go збільшилася. Вони швидкі й більш продуктивні, тому й помічаємо тенденцію перекладу сервісів з інших мов на Golang. До того ж код на Go значно легше писати, модифікувати та обслуговувати. Низка відомих компаній користується цією технологією: IBM, Intel, Adobe, Group, Avito, Ozon, Lamoda, BBC, Uber, Dropbox, Netflix та Twitter, Google. Деякі компанії організують навчання Go для нових працівників.

Створення вірусів

Такі інструменти, як Docker та Kubernetes написані на Golang. Якщо пошукати на GitHub, то можна знайти чимало цікавих програм на Go: від 3D-рушіїв до бібліотеки машинного навчання. На Golang написані мережева платформа Consul та система моніторингу подій Prometheus.

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

С, C++ vs Golang — брати чи конкуренти: чи важливим є технологічний бекграунд для вивчення Go

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

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

Мова Go відрізняється від програм, які написанні на C чи C++. Якщо перекладати програми на Go з C++ чи Java, то навряд чи це дасть задовільний результат. Щоб написати якісний код мовою Go, важливо вивчити особливості технології й розумітися в найменуванні, форматуванні, розробці програм тощо.

Синтаксис Gо дуже схожий на С, але він відрізняється від всіх мов OOP, хоча за функціоналом не відстає. Це спрощений аналог С і С++ для тих, хто займається веброзробкою.

З нового — це Goroutine, або база синхронного програмування — дуже швидкий automic reference counting, який використовує SWIFT Apple. Goroutines схожі на потоки, але управляються Go, а не операційною системою. Код, який запускається як Goroutine, може працювати одночасно з іншим кодом. Треба використовувати ключове слово go, потім пишемо функцію, яку хочемо виконати. Якщо потрібно виконати кілька кодів, можна скористатися анонімною функцією. Хоча зазначу, що анонімні функції використовуються не лише разом із Goroutine. Banchmark testing показав, що Garbage Collecting на новому компіляторі Golang займає 2 мілісекунди. Це в 40 разів швидше, ніж Node JS і у 20 разів швидше, ніж Java.

Вивчати Go цікаво, перш за все, тому що ця проста мова дозволяє виконувати дуже складні речі. За допомогою Golang можна швидко написати високонавантажений, багатопотоковий, кросплатформний додаток.

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

А зараз розглянемо переваги Golang для програмістів-початківців.

Переваги Golang для програмістів-початківців

Швидкість

Мова може компілюватись безпосередньо в машинний код і не вимагає інтерпретатора. Це сприяє швидшому виконанню програм, оскільки зникає потреба у проміжних процесах.

Швидкість мови приваблює все більше компаній, які бажають використати її у своїй роботі. Це породжує чималий попит на Go-розробників. За короткий час можна написати швидку програму.

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

Активне ком’юніті розробників

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

Легко навчитися

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

Читабельність

Як тільки ви звикаєте до синтаксису Go, прочитати чужий код — легке завдання. Go пропонує свій стиль програмування. У результаті питання на кшталт «використовувати фігурні дужки чи ні» відпадає, і залишається лише писати код за заданими правилами.

Тому Golang підходить для початківців.

Менше помилок

Більшість помилок виникають у неперевіреному чи складному коді. Go надає зручні засоби для тестування. Крім того, сувора типізація дозволяє уникнути помилок, які визначаються ще на етапі компіляції.

Про мінуси і плюси Golang

Відомий розробник Роб Пайк, який зараз працює в Google і брав участь у розробці мови Golang, якось сказав, що Go — це спроба об’єднати найкращі сторони таких технологій, як C++ та Java. Але все ж таки, на мою думку, у мові погано імплементовані дизайн-ідеї.

Серед мінусів GoLang

  • Generic programming лише з версії 1.18;
  • погано імплементовано інтерфейс, багато речей не підтримуються;
  • спрощений синтаксис — це плюс і мінус одночасно. Не вистачає сучасних ООP-конструкцій;
  • це нова технологія. Програмісти, які тільки починають освоювати Go, зіштовхнуться з проблемами роботи з наявними бібліотеками, особливо при взаємодії з іншими платформами. Для зв’язування кількох програм потрібно писати зайвий код;
  • Go не підтримує узагальнені функції. Узагальнені функції — це колекція різних функцій з тим самим ім’ям, але з невизначеними типами вхідних даних на момент компіляції. Без підтримки таких функцій програмістам потрібно створювати багато функцій, які приймають різні параметри. Через це обмежується можливість повторного використання коду та знижується ефективність розробки.

Але все ж таки плюси переважають мінуси. Golang ще називають «швейцарським ножем» у сфері розробки: Go досить простий та універсальний, а використовувати його можна для різних завдань — від створення API до DevOps-інструментів.

Golang вперше використав multisetting, який є дуже складним й на інших мовах. До речі, Rust вийшов після Go і також використовує таку ж архітектуру.

Серед плюсів GoLang

  • Легкий синтаксис, немає OOP, дуже хороша екосистема;
  • вже досить велике ком’юніті;
  • процес Garbage Collection дуже швидкий;
  • Goroutine ефективний: Don`t share a memory, but share with communicating memory;
  • швидка компіляція;
  • зручність коду та документації;
  • спрощене керування версіями програми;
  • мінімалістичність;
  • найкраща підтримка паралелізму;
  • зрозуміла специфікація та легкість у вивченні;
  • надійність. Використовується сувора статична типізація, відсутність класів та успадкування;
  • можливість автоматизації розробки. На Golang дуже просто писати генератори коду, статистичні аналізатори, юніт-тести. Покриття коду юніт-тестами на 90% є практично недосяжним для C++ розробника, але цілком можливо при роботі з Go
  • Ефективність командної розробки. Суворий підхід до форматування допомагає стандартизувати код, спростити рефакторинг застосунків;
  • універсальність. Програмісти охоче створюють для цієї мови готові бібліотеки та фреймворки, які можна використовувати для розробки програм;
  • багата стандартна бібліотека. У мові є все потрібне для веброзробки й не тільки. Кількість сторонніх бібліотек невпинно зростає. Крім того, є можливість використовувати бібліотеки C та C++);
  • можливість писати у функціональному стилі. У мові є замикання (closures) та анонімні функції. Функції є об’єктами першого порядку, їх можна передавати як аргументи й використовувати як типи даних.

Перспективи мови Go

За останні роки у цифровому середовищі відбулися глобальні зміни: з’явилася величезна кількість нових мереж, збільшились обсяги кластерних обчислень та розміри хмарних систем. Тому поява сучасної швидкокомпільованої мови, що ефективно запускається на сотнях або навіть тисячах машин — чудова новина для IT-бізнесу.

Кількість вакансій Go Engineer активно зростає у таких великих корпораціях, як Facebook, Amazon, Google. І це є ознакою великих перспектив. Зараз все більше інженерів переходять на Go, дедалі більше продуктів розробляються цією мовою. Думаю, надалі нові проєкти будуть писати на Go, хоча і Python залишиться. Але все ж таки Go швидша, ніж Python.

Тож є шанс спіймати хвилю і стати фахівцем до того, як технологія стане мейнстримом. Поки решта освоюватиме базу, ви вже досягнете високого рівня.

5 послідовних кроків. Гайд з вивчення технології

Від кандидатів на вакансію Golang-розробника вимагають володіння широким спектром професійних навичок. Ось найпоширеніші з них:

  • Досвід написання скриптів (Shell/PERL).
  • Досвід розробки програм за допомогою шаблонів проєктування JavaScript, SOAP, вебсервіси REST чи мікросервіси.
  • Досвід роботи з Git.
  • Знання практик DevOps.

Поріг входження у Go відносно низький. Це проста в освоєнні мова, що супроводжується докладною технічною документацією. Маючи досвід роботи з C, ви зможете без особливих зусиль перемикнутися на Go.

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

Крок 1. Вивчення основ технології

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

  • Імена файлів, ключові слова та ідентифікатори.
  • Оператори, типи, функції та константи.
  • Показники, структури та методи.
  • Карти, масиви та зрізи.
  • CLI.
  • Інтерфейс.
  • Обробка помилок.
  • Горутини, канал, буфер.
  • Panic, Defer, Error, Recover.
  • Шаблони проєктування Go.

Початківцям рекомендується спочатку освоїти базові поняття: імена файлів, ключові слова та ідентифікатори, а потім переходити до типів даних, операторів та рядків.

Тим, хто вже має досвід програмування, також варто вивчати Go з азів, починаючи з характерних рис. Модель технології відрізняється від звичної й передбачає інший підхід до ООP.

Крок 2. Вивчення бібліотек й інструментів Go

Освоївши базові поняття мови, переходьте до вивчення додаткових бібліотек та інструментів, що полегшують застосування Go. Більшість компаній чекають від вас досвіду роботи з:

  • Інструментами керування залежностями.
  • Семантичним керуванням версій.
  • Скриптами та репозиторіями.
  • Бібліотеками Go.
  • Основами SQL.
  • GIT.
  • Стандартними методами автентифікації.
  • HTTP/ HTTPS.
  • Вебфреймворками та маршрутизаторами.
  • Реляційними базами даних (PostgreSQL).

Додатково необхідно вивчити фреймворки, бібліотеки Go та бази даних. Це можна зробити в рамках процесу навчання або безпосередньої роботи.

Що стосується фреймворків, то рекомендується почати з Beego, Gin, Revel, Chi й Echo. Говорячи про бібліотеки, до найвідоміших входять Go Kit, GORM, Gen і CLI. Хороші бібліотеки та пакети спрощують роботу з Go. Оскільки кожна з них має свої характерні особливості, то при виборі враховуйте її відповідність поставленим цілям.

Також важливим є досвід роботи з реляційними базами даних, такими як: PostgreSQL або MySQL. Крім цього, знадобиться знання фреймворків логування, наприклад, Zap, як найбільш затребуваного в роботі з Go.

Крок 3. Вивчення і тестування в Go

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

Як Go-розробник ви будете створювати продукти, які обов’язково треба тестувати на зручність й надійність. Є кілька видів тестування:

  • модульне,
  • інтеграційне,
  • поведінкове,
  • наскрізне (end-to-end).

Найважливішим для новачків є модульне тестування. Стандартна бібліотека мови включає інтегрований пакет testing. Не завадять також для більш надійного тестування такі відомі фреймворки, як: Ginkgo і GoCheck. Перший також підходить для поведінкового та інтеграційного тестування.

Крок 4. Освоєння шаблонів Go

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

Go надає шаблони проєктування, аналогічні іншим мовам, які можна розподілити за такими категоріями:

  • структурні,
  • похідні,
  • поведінкові,
  • паралелізм,
  • стабільність.

До найважливіших з них входять: похідні (Будівельник, Фабрика, Одинак); поведінкові (Ітератор, Спостерігач, Команда) та структурні (Адаптер, Міст, Декоратор).

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

Крок 5. Створення портфоліо

Ну, а далі — до практики. Розробляйте продукти на Go. Це найкращий спосіб освоєння мови. Отже, що більше створюєте — то більше вивчаєте. Як можна створити своє портфоліо?

✅ Проходження онлайн-курсів з програмування на Go.
✅ Участь у відкритих проєктах Go.
✅ Створення проєктів Go з нуля.
✅ Реалізація модулів Go в наявних проєктах.
✅ Програмування класичних алгоритмічних завдань за допомогою Go.
✅ Проходження курсів за суміжними технологіями, наприклад SQL.

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

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

Сподобалась стаття? Натискай «Подобається» внизу. Це допоможе автору виграти подарунок у програмі #ПишуНаDOU

👍ПодобаєтьсяСподобалось6
До обраногоВ обраному4
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Відколи

немає OOP

почало вважатись плюсом?

На самом деле там ООП есть, удовлетворяющий трём ключевым парадигмам, чего в принципе достаточно.

А що взагалі думаєте про ORM в Go? Не так давно почав вивчати цю мову і зіштовхувався із думками, що такі пакети як GORM — суперечать філософії Golang.

Не вижу большого смысла в GORM, если вы не намерены почему-то менять СУБД.

Запити писати кожен раз руками?

Є sqlc dou.ua/forums/topic/34806 який генерує код на основі запитів.

Писать руками и так придётся, особенно если это сложные запросы и составные транзакции.

Тільки я прочитав заголовок як «5 років на вивчення» ?

Які ресурси для вивчення порадите?

за навчальні матеріали дякую. PHP мене оминуло, Бог милував

Плюси в червоній рамці, мінуси в зеленій — дуже логічно. Спочатку вам не вистачає ООП конструкцій, далі пишете як добре шо немає ООП. «Ви батюшка або хрестик зніміть або труси вдягніть» ©

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

З версії 1.18 в Go є дженерики. Виправте помилки!

Вважаю, що тим, хто вже має досвід роботи з C++ або С, значно легше вивчати Go.

Rust

Не дуже згоден з легкістю. Я Go почав вивчати після Python. Останній і легше вивчати і матеріалів набагато більше. Якщо я помиляюсь, скиньте мені якісь посилання, бо, наприклад, реалізація Dependency Injection, яке використовується майже в кожному проєкті. Теорію наче розумію, але реалізувати можу лише списуючи з готового коду.

DI як такого немає, бо він й не потрібен зазвичай.
Все інше вирішується кодогенерацією.

Думаю, надалі нові проєкти будуть писати на Go, хоча і Python залишиться. Але все ж таки Go швидша, ніж Python.

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

Швидкість

Ну от немає в го інтепретатора, так в расті теж немає і раст принижує го по швидкості просто глобально або у пітона є pypy чи cython і мені вистачає і нашо мені тоді го.

Активне ком’юніті розробників

В усіх популярних мовах активне ком’юніті вони тому і популярні.

Легко навчитися

Це маніпулятивне твердження, ну так можна пройти го-тур за вечір але для хоча б більш менш продуктивного використання доведеться ще зверху прочитати щось по типу Concurrency in Go, як власне і для будь якої іншої мови.

Читабельність

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

Менше помилок

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

SDK для Golang гарну написали Amazon. Компонентна, нічого не намішано, на все є інтерфейси тому можна писати нормальні моки. Дуже велику роботу зробили
Крім того не дивно що попит зростає бо SDK K8S/Helm і т.д розвивається переважно у Golang.

Поки немає конкретних практик з gitops’у в рамках зелижних ресурсів IaC -> k8S, й crossplane створює лише купу проблем зверху.. Підходів до розробки платформозалежних helm чартів також не існує... у різних хмарах — різний кубер. Загалом пакетні менеджери типу Carvel лише підливають масла у вогонь т.к. також точаться під VMWare Tanzu...

Зараз у плані залежності між terraform / pulumi ресурсів з k8s дуже велика прірва...
Я поки рендерю helm чарти в yaml’ики... а з yaml’иків вже генерую Terraform код через k2tf, таким чином «все на тераформі» й принаймні зберігається атомарність стану інфраструктури. Разом з CTS модулями (consul-terraform-sync) відпадає необхідність в Kudo/Keda операторах та масштабуванні... думаю якось може з доповідю десь виступлю.

tldr; кубер — помийка й там «не розвивається» а частіш «вендорно прогниває».

Шось дивна якась історія, будь хто зі знанням джанги 2.2+ без проблем розбереться з джангою 2.1

На даний час налічується понад мільйон Go-програмістів

Яке джерело цієї інформації?

Яка стаття — таке й джерело...

Була минулорічна статистика про мільйон, але тоді в Україні має бути 80 тисяч Go-розробників і також має бути десь ще підпільний DOU з блокчейном.

Ось можливий варіант douhub.com.

Якщо адміністрація видалить коментар то визнає існування підпільного DOU.

З мінусів погоджусь тільки про дженеріки — іноді їх дуже не вистачає і це дійсно іноді мене дратує. Треба багато копіпастити (хтось каже на це — писати зайвого коду :-))

А далі:

погано імплементовано інтерфейс, багато речей не підтримуються;

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

спрощений синтаксис — це плюс і мінус одночасно. Не вистачає сучасних ООP-конструкцій;

У Golang свій погляд на ООП. І мій погляд з ним збігається — мені вистачає усього.

це нова технологія. Програмісти, які тільки починають освоювати Go, зіштовхнуться з проблемами роботи з наявними бібліотеками, особливо при взаємодії з іншими платформами. Для зв’язування кількох програм потрібно писати зайвий код;

Цей аргумент ще років 5 назад можна було приводити. Зараз вже навіть виглядає смішно

Go не підтримує узагальнені функції

Вкрай спірно. Так іноді копіпастити (хтось це називає писати зайвий код) дратує, але ще більше мене дратує різна магія типу узагальнених функцій, DI фреймворки (за це взагалі жах)

Якщо серьйозно то Golang вже використовую рік і це найкраще що зі мною сталося у моїй професійній кар’єрі. Мова проста, і виглядає дуже примітивно у порівнянні з такими монстрами як C#/Java, але в цьому і її великі плюси. Ти можеш створювати з простих конструкцій щось своє комплексне. І я задачу імплементації якихось паттернів не називаю «писати зайвий код». Це виконання задач софтвере інженерів.

Ще доречі у продакшені заюзати не було нагоди але є декілька місць де прям проситься рефакторінг. Наприклад реалізовував Future паттерн (це як promise у JS) там довелося для кожного типу данних малювати свою структуру яка відповідає інтерфейсу

1. Варто глянути як працює gnet та ants
Не можу сказати що то щось хороше, хоч й швидка реалізація, але багато чого не вистачає.
2. Написання власної реалізації планувальника та відповідного поллера дуже нетривіальне завдання, й люди давно вже багато чого написали... хоча шо коти (cats-effect) шо Zio шо gnet/ants по дизайну зараз більше схожі на Rust Tokio. Реактори... мультиреактори... протрактори... ретрактори... дізраптори... etc все воно щасливі яйця короч.
3. Простим людям дуже тяжко зрозуміти важливість 0 alloc/sec та gc pressure у бенчмарках — дуже багато доводиться кодогенерувати, та вручну керувати памятю, особливо offheap’ом... хоча те ж стосується й Java/JVM та пі©тона.

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

В реальному житті не часто зустрічаються випадки з тестуванням на мокнутій БД чи сервісі, й від того більше шкоди а ніж користі, тому інджект моків та й загалом уся концепція DI дуже переоцінена. В скалі то, наприклад, DI вбудований в саму мову, й можна на льоту кодогенерувати реалізації будь чого (macro type derivations)... поки макроси або сам пошук реалізації не зациклиться %)

концепція DI дуже переоцінена

DI це просто dependency injection і все. Ми часто інжектим залежності бо без цього не можливі юніт тести. DI це просто паттерн
А от та уся магія з автоматичним DI це ***ня якась. Я з python стрибнув там такого не практикувалось. А побачив що творять на .net це жах. Код з di заплутаний та не зрозумілий

Простим людям дуже тяжко зрозуміти важливість 0 alloc/sec

Це ще одна причина чому я полюбив Golang. Мало зустрічав серед комьюніті «простих людей». У інших монстрах типу. Java/C# розробники гарно жанглюють мовними конструкціями, знають тисячі ООП паттернів, але всеодно виглядають як діти, які збирають конструктор Lego по інструкції. Ці мови прям кажуть — пиши логіку, про все інше не турбуйся. От вони і стали трансляторами Bussiness Requirements у код. А коли зістовхуються з чимось такам етаким кажуть — ну це обмеження мови.
Я уперше зіштовхнувся з Golang коли попросили розробити гарну інфраструктуру/фреймворк для Load Testing. Тоді знайшов K6 і писав під нього розширення. Але коли зіштовхувались з проблемою що апка яку тестують пожирала усю пам’ять знаєте що робили? Правільно — або докидували подів або розширювали пам’ять. Тобто основна задача Load Testing у тюнінгу оточення та биттю по рукам девопсів.
Це мене вкрай засмутило. І одного дня сказав — да ну його. Сподіваюсь більшість свічнулось на Golang так само (доречі багато світчерів бачив саме з DevOps — мабуть сильно по рукам били :-))

бо без цього не можливі юніт тести

Тут в принципі так само як й в kotlin’і реалізована окрема internal область видимості й тести до файлика в пакеті лежать поряд з самим файликом, якщо потрібна ізоляція — просто додають _test закінчення до назви пакету в самому тест файлі
file.go -> package mypkg
file_test.go -> package mypkg_test або mypkg

мабуть сильно по рукам били :-))

То окрема проблема бо часто доводиться фіксити terraform провайдери чи то якісь оператори до кубера писати, й там все дуже нетривіально так як багато кодогенерації.

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