[Перевод] Использование 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 для нагрузочного тестирования о чем написано в блоге.

© Habrahabr.ru