Мови програмування Go — сім років



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

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

  1. Чому ти вибрав Go (плюси/мінуси)?
  2. Що ти вже написав на Go?
  3. Як краще вивчати Go, що порадиш початківцям?
Ось що вони відповіли.

Віктор, програміст Пошти Mail.Ru

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

На сьогоднішній день я написав сховище blob'ів для Пошти Mail.Ru: у ньому зберігаються майже (але не зовсім) тіла листів. Також допомагав переписувати на Пошту Go.

Для початку в Go цілком достатньо вивчити tour.golang.org. У стандартній бібліотеці є майже все, щоб написати не занадто складний веб-сервіс. З стороннього відразу знадобляться хіба що коннектори до баз даних. Go досить простий, там немає складної теорії і хитрих логічних концепцій, мало «тонких» місць у специфікації. Мені здається, що краще всього вивчати мову в процесі написання коду.

Поради:

  • Гуглити що-небудь про Go краще за слова «golang».
  • Краще відразу використовувати утиліти для vendoring'а.
  • Якщо є сумніви з приводу роботи компілятора/runtime, можна подивитися його вихідний код на Go. Він цілком читається і йде в комплекті з компілятором.
Михайло, провідний програміст myTarget

«Мені нудно знати те, що раніше знав». Одного разу інтернет переконав мене, що добре знати нові мови програмування. Не просто інші, крім звичних C++ і Python, а саме нові: за ними майбутнє. Я дивився в бік Rust, Go і Scala. Але при цьому дуже хотілося, щоб досліджуваний мову міг згодитися саме мені. Роки три тому я захопився Erlang'ом (і ФП в цілому), але зрозумів, що заробляти на ньому — та ще стільки ж, скільки на C++, — я не зможу (відразу, а не через п'ять років). З цієї ж причини відпала Scala (шкода, мені вона здалася дуже цікавою), ця мова передбачає серйозний бекграунд на Java. Rust просто не сподобався відразу. Go, до речі, теж не сподобався: після C++ мені багато чого в ньому не вистачає, в першу чергу гнучкості.

Але Go є багата бібліотека, горутины, він розвивається, на ньому пишуть серйозні речі (Docker, Dropbox). І — зворотна сторона того, що мені не сподобалося, — Go вимагає дещо іншого мислення. Не ООП, як в C++ або Python. Ця перспектива освоїти «дещо інше мислення» мене і приваблює.

З прагматично-фінансової складової Go теж непогано. Область його застосування — мій улюблений backend. Тобто моїм залишається основною мовою C++, але потроху деякі завдання вирішуються на Go — на тому ж самому робочому місці, без втрати в зарплаті. На Go я поки написав тільки утилітка для розпізнавання і поповнення тегами своєї музичної колекції. Це було, коли я знайомився з мовою. Тоді ж зрозумів, що Йти не призначений для таких завдань.

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

  • для початку прочитати що-небудь, ознайомитися із синтаксисом і знайти документацію (зроблено);
  • спробувати написати щось, вирішити для себе — чи потрібно тобі це (зроблено);
  • якщо все-таки треба писати код, читати чужий, писати, обговорювати, писати, читати код, читати статті, писати, писати, ну, можна відпочити, книжку про Go прочитати, писати, обговорювати, писати і так далі. Загалом, головне — практика.
Ілля, програміст Пошти Mail.Ru

Я встиг попрограммировать багато на чому (C++, PHP, Java, Objective C). До того як прийти в Mail.Ru Group, писав на Perl. Писати на ньому можна, але сумний місцями, так як дуже багато «історично склалося» жахливого коду. В якийсь момент я почув про Go і Rust, приблизно в один і той же час, і вирішив спробувати. Мені більше сподобався Go. З часом я навіть придумав, як його використовувати в роботі. Плюси — простота, компільований мову, сувора типізація, статична компіляція.

На Go я писав для двох проектів Mail.Ru Group: для Cars Mail.Ru написав асинхронного «павука» для завантаження картинок із зовнішніх джерел з можливістю дострокової зупинки скачування; для Пошти Mail.Ru — парсер/разборщика/відправника логів. Решта — з проектики, швидше експериментального характеру.

Тим, хто хоче освоїти Go, потрібно починати писати код і гуглити. Може, сподобається, а може, й ні. Є маса відеоуроків, статей навалом. В Go є свої фішечки, які багатьом людям можуть не сподобатися. :) Мова досить простий, з невеликою кількістю магії. Хоча порівняно з Perl її майже немає. Видані хороші книжки (Алан А. А. Донован, Брайан У. Керниган. «Мова програмування Go»; Марк Саммерфильд. «Програмування Go. Розробка додатків XXI століття»), вони допоможуть використовувати більш правильні підходи до розробки на Go і добре розібратися в інструментах.

Максим, стажист Поштою Mail.Ru

Коли я прийшов на співбесіду, то претендував на посаду C-розробника backend'а Пошти Mail.Ru. А проводив співбесіду мене Віктор. Діалог був приблизно таким.

— Чи хочеш писати? — запитав Вітя.
— Не дуже, — чесно відповів я.
— А чому?
— У ньому багато букафф.
— Згоден, тоді йдемо до мене, будемо писати на Go — та ніякого, — запропонував Вітя, хитро примруживши око.
— Че-то страшно, на Go пишуть хіпстери, а нам серйозні штуки робити треба, — відповів я, вже майже згоден на все.
— Та все буде норм, зуб даю! — сказав Вітя…

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

Якщо Go — ваш перший досвід в програмуванні, радійте. Тут набагато менше синтаксичних конструкцій у порівнянні з Python, Ruby, Java, що повинно трохи спростити навчання. Go не самий елегантний мову, але при цьому він дуже виразний. Величезна кількість допоміжних інструментів (gofmt, goimports, govet...) допоможе забути про багатьох дратівливих проблеми.

Для початку рекомендую прочитати пост effective go. Відпочити, перечитати effective go, через деякий час ще раз заглянути в effective go. Effective go багато не буває, його варто перечитувати час від часу. Усім важливо зрозуміти (а деяким — пробачити) модель пам'яті мови та запам'ятати: «Do not communicate by sharing memory; instead, share memory by communicating».

Олександр, молодший програміст в Пошті Mail.Ru

У січні я прийшов стажистом на посаду З-розробника. У перший день колега запитав: не хочеш писати на Go? Я погодився. Так все і закрутилося. Переписав з Perl на Go поштові треди, також на підході Сишный messages/status. Зараз переписую поштовий API з Perl/C. На opensource-проекти поки що не вистачає бажання. :(

Новачкам спочатку варто пройти tour.golang.org :). Потім можна спробувати написати власний API-сервіс, щоб охопити як можна більше можливостей стандартної бібліотеки, використовуючи
http.HandleFunc
. А далі написати свій власний
http.HandleFunc
:)

Роман, програміст в групі розробки відеосервісів

Коли я прийшов в Mail.Ru Group, наш основний backend листувався з NodeJS на Go. Так що це Go вибрав мене, але я задоволений. Go є три основних переваги перед NodeJS:

  • статична типізація;
  • просте, але продумане оточення;
  • і хороша модель асинхронних/конкурентних обчислень.
Go дуже сильно орієнтований на простоту, і цим він мені подобається. Однак через простоту доводиться платити. Наприклад, відсутністю generic'ів. Також не всі проблеми вирішені і з вендорингом. Однак слід пам'ятати, що Go не замислювався як мову з найбільш широкою сферою застосування, тому його мінімалізм у чому виправданий.

Мій досвід розробки на Go поки обмежується микросервисами і консольними утилітами. Щоб почати знайомитися з Go, рекомендую відкрити специфікацію і читати по 20 хвилин перед сном, поки не визубрити (жартую). Звичайно, щоб освоїти мову, на ньому треба писати. А для засвоєння ідіом добре б погортати код стандартних бібліотек Go. Ще рекомендую effective go.

Дмитро, програміст в студії Тільки Team

Я вибрав Go в основному тому, що мені не відомі інші мови, у яких асинхронний IO можна було б писати так само просто, як синхронний (хіба що async-await в C#, але на *nix-системах він не дуже популярний). Крім того, мова простий у вивченні, в стандартній бібліотеці є майже все що потрібно (і є розвинена екосистема сторонніх бібліотек); інструментарій легкий, без надмірностей, хороша документація. З недоліків: мені не вистачає generic'ів.

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

На цьому все. А як ви вивчали Go? Діліться історіями в коментарях.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.