5 років на Go: що вміє ця мова, чого очікувати та чи варто переходити на неї
Привіт! Мене звати Євген Підвисоцький, я Senior Go Software Engineer у компанії SoftServe. Моя історія з Go розпочалася 5 років тому — тоді на вивчення мені знадобилася одна книжка та кілька місяців на практику. На щастя, її синтаксис і логіка дозволяють розібратися швидко. Особливо якщо до цього маєш досвід у розробці. Думаю, тому 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 завдяки клієнту зі сфери консалтингу у
Для основи теоретичної частини я обрав книгу «Програмування на мові 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 — система для створення ізольованих віртуальних машин з будь-яким необхідним для тестування середовищем. Крім цього,
Перевага Go — це поступове зростання. Немає шаленого раптового попиту, після якого зазвичай настає стрімке падіння. Наприклад, деякий час на піку популярності була мова Groovy, зараз її вже мало хто згадує, вона згасла. Натомість Go розвивається іншим шляхом і навряд чи швидко втратить позиції. Якщо у Go якісно реалізують generic, то це буде сильний плюс, який привабить багатьох фахівців.
Сподобалась стаття? Підписуйтесь на автора, щоб отримувати сповіщення про нові публікації на пошту.

Найкращі коментарі пропустити