К списку

РазGOняйся с Go

26 февраля 2016

Go, также известный как Golang, был разработан тремя программистами из Google в далеком 2007. Для сообщества Open Source разработчиков он был представлен в 2009. Однако по-настоящему набирать обороты Go стал лишь в последние годы, когда такие знаменитые компании и продукты, как Dropbox, Docker, Google (разумеется), eBay, Baidu и Spotify стали им пользоваться. Go поддерживается Windows, Mac OS X, Linux, BSD, UNIX, а также мобильными устройствами на Android и iOS.

Опыт работы с Go наша компания получила, когда заказчик приобрел написанную на нем систему. У клиента не было компетентных специалистов в этой области. Coherent Solutions/ISsoft, в свою очередь, не раз демонстрировали свою способность схватывать новые технологии на лету – и поэтому за помощью с разработкой на Go обратились именно к нам. Что же мы узнали о языке программирования Go на собственном опыте?

В общих чертах

Недовольные сложностью C++, разработчики Go хотели создать такой язык системного программирования, который бы был:

  • Императивным, компилируемым и статически типизированным;
  • Масштабируемым для больших систем, как Java или C++;
  • Имел чистый и простой синтаксис;

Привычный механизм наследования в Go отсутствует. Вместо него используется механизм встраивания, который позволяет включать структуру в структуру. Такой подход дает возможность перекрывать методы встраиваемых структур и получать доступ к их свойствам. Также, в Go используется утиная типизация (“duck typing”), благодаря которой нет необходимости описывать, какие интерфейсы поддерживаются структурой. В частности, если структура реализует методы, описанные в определенном интерфейсе, то она автоматически реализует этот интерфейс.

Преимущества Go

  1. Производительность. Являясь компилируемым языком, Go раз в 10 быстрее, чем Python или Ruby. И, несмотря на то что он все же чуть медленнее C++ или Java, у него есть все шансы повышать свою производительность в процессе усовершенствования.
  2. Скорость и легкость разработки. Go был создан с упрощенным синтаксисом, чтобы его было более легко осваивать. Разрабатывать приложения на Go намного проще, чем на C++, который требует управления памятью вручную. Более того, стандартная библиотека Go достаточно обширна и позволяет реализовать все стандартные задачи. Вдобавок, существует огромное количество сторонних библиотек. Наконец, во многих IDE (IntelliJ IDEA, Eclipse IDE) есть поддержка Go через плагины, что тоже существенно упрощает разработку.
  3. Конкурентное программирование. На Go достаточно легко создавать асинхронно выполняемый код благодаря таким механизмам, как Go Routines («горутины») и Channels («каналы»). В частности, «горутины» — это одно из самых крутых свойств Go. Они представляют из себя легковесные потоки, которые занимают лишь несколько килобайт. Их можно создавать тысячами, а синхронизацию и коммуникацию между ними осуществлять через каналы.
  4. Сборщик мусора. Этот механизм значительно упрощает взаимодействие с памятью. Также, он снижает риски возникновения ошибок (утечки памяти).
  5. Статическая типизация. Эта функция позволяет находить и исправлять огромное количество ошибок еще на стадии сборки кода.
  6. Статическая линковка. Все сторонние библиотеки включаются в собираемое приложение. Таким образом, уменьшается гибкость приложения, но зато повышается стабильность. Можно совершенно не переживать о зависимостях во время развертывания приложения.
  7. Кроссплатформенность. В Go есть поддержка кросскомпиляции под самые популярные платформы.
  8. Open Source.
  9. Поддержка модульного тестирования. Встроенный пакет дает возможность легкого покрытия кода тестами.

Недостатки Go

  1. Маленькое сообщество разработчиков. Пока сообщество Go разработчиков далеко не такое большое, как у конкурентных технологий Python, Ruby и Node.js.
  2. Отсутствие «дженериков». Совершенно не исключено, что дженерики могут появиться в следующих версиях. Однако на данный момент можно лишь пользоваться обходными путями, которые позволяют эмулировать похожий принцип работы.
  3. Отсутствие исключений. Это было частью концепции разработчиков Go. Вместо механизма исключений используется явная обработка ошибок, возвращаемая функциями.

Выводы

Учитывая преимущества и недостатки этого языка программирования, его можно использовать для разработки следующих типов приложений:

  1. Критичные по производительности и масштабируемости серверные компоненты;
  2. Высоко-нагруженные сайты или же сервисы, неперегруженные бизнес-логикой;
  3. Высокопроизводительные компоненты для Android или iOS;
  4. В качестве доступного введения в обучение языкам программирования.

За последние несколько лет популярность Go выросла в разы. Все больше и больше компаний используют его для самых разнообразных приложений и сервисов. Согласно рейтингу RedMonk, за первые 7 месяцев 2015 года Go поднялся с 17 позиции на 15. Основной критерий рейтинга – популярность использования языка на GitHub и StackOverflow. В то же время, с Декабря 2014 до Августа 2015 Go упал с 46 позиции ниже 50-ой на рейтинге TIOBE. Этот рейтинг отличается от других тем, что он основывается на поисковых запросах. Тем не менее, общая тенденция развития Go положительная.

Роман Криветский, Golang разработчик