Використання Go в уряді

Коли UK Government Digital Service (Служба Електронного Уряду Великобританії) взялася за GOV.UK код був в основному написаний на Ruby. З тих пір ми спробували у справі кілька мов, включаючи Java, Clojure, Scala, Python і Javascript. Останнім часом ми переключилися на Go для ряду проектів.
Нижче короткий звіт про отриманому досвіді. Як ми використовували Go і що на наш погляд корисно знати іншим розробникам помышляющим про впровадження мови в своєму оточенні. Якщо вас цікавлять подробиці, то більш детальну інформацію ми публікували в блозі router мій переклад, crawler і CDN acceptance test.

Чому взагалі Go?

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

Легкість для розуміння

Мова визначена досить простою і ясною специфікацією. Це полегшує завдання викликати початковий інтерес у колег для розбору коду, а потім і участі в розробці. Однак ми жодного разу не відчували себе обмеженими цією простотою. Коли вам потрібна виразність для побудови власних моделей, абстракція інтерфейсу і композиционность надають достатній і надійний арсенал засобів.
Хвалена стандартна бібліотека мови на перевірку такою і виявилася. Вона покриває широкий спектр повсякденних завдань включаючи, наприклад, доступ до файлової системи, будівництво HTTP сервісів, консольних утиліт, роботу з JSON даними і календарними уявленнями. Стандартна бібліотека має достатню глибину і добре продуману архітектуру. Наскільки можливо бібліотека побудована на стандартах RFC, в якості основного матеріалу.
Бібліотека написана якісним, идиоматичным кодом і прекрасно документована так, що може слугувати навчальним посібником навіть для досвідчених розробників. Крім того пропонуються курс молодого бійця і утиліта стандартного форматування коду.

Легкість у розгортанні

За останні кілька років ми вивчили різні моделі розгортання Ruby (зразок Unicorn workers) і побудували свої кошти. Ми культивуємо регулярні і часті релізи. Технології полегшують розгортання надзвичайно затребувані в наших обставинах і тут Go показав себе з кращого боку.
У мови немає спеціальних вимог до системи для підтримки середовища виконання. Програма статично компілюється в один бінарники, який встановлюється на машині, де буде виконуватися. Немає ніяких залежностей часу виконання (зразок bundle install для Ruby) необхідних на цільовій машині. І рестарт сервісу на порядок швидше і простіше, ніж в Ruby.

Легкість у застосуванні

Зазвичай команда вирішує, яку мову годиться. Це рішення командне, а не персональна. Go за останній рік завоював широке визнання у нашої команди. Спробуємо пояснити чому.
Їм легко заразити людей, від сисадміна який втілювався, що не вміє програмувати, до розробника попробывавшего Go в якості другого мови. Успішності мови чимало сприяє дбайливе ставлення його піклувальників. Зокрема для нас дуже важливі гарантії сумісності для 1.х релізів.
Утиліти go tool сильно спрощує життя при вирішенні типових завдань циклу розробки проекту. Сі-подібний синтакс спрощує знайомство з мовою перед освоєнням специфічних ідіом.
Якщо вам близький девіз “Make it work. Make it right. Make it fast" («Добийся щоб працювало. Працювало правильно. І працювало швидко»), тоді можете бути впевнені написане Go працює досить швидко з першої спроби. Висока швидкість виконання і впевнено зростає з кожним релізом, а стандартна бібліотека добре оснащена. Це означає, що ми можемо сконцентруватися на характеристиках нашого коду важливих для команди: зрозумілість і читабельність.

далі

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

[прим. пер.] З сторонніх Go бібліотек GDS активно використовує gor для віддзеркалення трафіку і vegeta для навантажувального тестування про що написано в блозі.

Джерело: Хабрахабр

0 коментарів

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