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
- Производительность. Являясь компилируемым языком, Go раз в 10 быстрее, чем Python или Ruby. И, несмотря на то что он все же чуть медленнее C++ или Java, у него есть все шансы повышать свою производительность в процессе усовершенствования.
- Скорость и легкость разработки. Go был создан с упрощенным синтаксисом, чтобы его было более легко осваивать. Разрабатывать приложения на Go намного проще, чем на C++, который требует управления памятью вручную. Более того, стандартная библиотека Go достаточно обширна и позволяет реализовать все стандартные задачи. Вдобавок, существует огромное количество сторонних библиотек. Наконец, во многих IDE (IntelliJ IDEA, Eclipse IDE) есть поддержка Go через плагины, что тоже существенно упрощает разработку.
- Конкурентное программирование. На Go достаточно легко создавать асинхронно выполняемый код благодаря таким механизмам, как Go Routines («горутины») и Channels («каналы»). В частности, «горутины» — это одно из самых крутых свойств Go. Они представляют из себя легковесные потоки, которые занимают лишь несколько килобайт. Их можно создавать тысячами, а синхронизацию и коммуникацию между ними осуществлять через каналы.
- Сборщик мусора. Этот механизм значительно упрощает взаимодействие с памятью. Также, он снижает риски возникновения ошибок (утечки памяти).
- Статическая типизация. Эта функция позволяет находить и исправлять огромное количество ошибок еще на стадии сборки кода.
- Статическая линковка. Все сторонние библиотеки включаются в собираемое приложение. Таким образом, уменьшается гибкость приложения, но зато повышается стабильность. Можно совершенно не переживать о зависимостях во время развертывания приложения.
- Кроссплатформенность. В Go есть поддержка кросскомпиляции под самые популярные платформы.
- Open Source.
- Поддержка модульного тестирования. Встроенный пакет дает возможность легкого покрытия кода тестами.
Недостатки Go
- Маленькое сообщество разработчиков. Пока сообщество Go разработчиков далеко не такое большое, как у конкурентных технологий Python, Ruby и Node.js.
- Отсутствие «дженериков». Совершенно не исключено, что дженерики могут появиться в следующих версиях. Однако на данный момент можно лишь пользоваться обходными путями, которые позволяют эмулировать похожий принцип работы.
- Отсутствие исключений. Это было частью концепции разработчиков Go. Вместо механизма исключений используется явная обработка ошибок, возвращаемая функциями.
Выводы
Учитывая преимущества и недостатки этого языка программирования, его можно использовать для разработки следующих типов приложений:
- Критичные по производительности и масштабируемости серверные компоненты;
- Высоко-нагруженные сайты или же сервисы, неперегруженные бизнес-логикой;
- Высокопроизводительные компоненты для Android или iOS;
- В качестве доступного введения в обучение языкам программирования.
За последние несколько лет популярность Go выросла в разы. Все больше и больше компаний используют его для самых разнообразных приложений и сервисов. Согласно рейтингу RedMonk, за первые 7 месяцев 2015 года Go поднялся с 17 позиции на 15. Основной критерий рейтинга – популярность использования языка на GitHub и StackOverflow. В то же время, с Декабря 2014 до Августа 2015 Go упал с 46 позиции ниже 50-ой на рейтинге TIOBE. Этот рейтинг отличается от других тем, что он основывается на поисковых запросах. Тем не менее, общая тенденция развития Go положительная.
Роман Криветский, Golang разработчик
Вы можете присоединиться к команде ISsoft, откликнувшись на вакансии GO разработчиков.