Согласно Википедии, Go (или Golang) - это язык программирования, который был разработан командой Google и впервые он появился в 2009 году. Он был разработан специально для бэкенд-разработки и инфраструктурных проектов.
Go - это язык программирования с открытым исходным кодом, который позволяет производить простой, эффективный и масштабируемое ПО.
В голову приходят следующие проекты, которые полностью написаны на GO:
- Docker - движок по управлению контейнерами.
- Kubernetes - система кластеризации для контейнеров. Разработана Google и является системой с открытым кодом.
- Traefik - балансировщик нагрузки, разработанный Traefik Labs.
- Consul, Terraform - инструменты по управлению инфраструктурой, разработанные Hashicorp.
В трендах гитхаба по этой ссылке вы можете найти сотню и тысячу других проектов.
Как вы можете видеть, GO очень популярен для серверных проектов, но он также активно используется для разработки консольных приложений, потому что на нём можно скомпилировать бинарники, которые будут очень быстрыми и маленькими.
Моими личными предпочтениями в пользу языка программирования GO являются следующие преимущества:
- портативность - скомпилировали исполняемый файл, который можно спокойно использовать на других компьютерах. Для этого не требуется устанавливать какое-то дополнительное ПО;
- кросс-платформенность - можно скомпилировать бинарники для различных операционных систем: Linux, Windows, MacOs. При этом генерируются они достаточно просто - командой
go build
. По умолчанию в Go используется статическая компоновка. Это значит, что создаваемые двоичные файлы легко переносятся на другие компьютеры с той же ОС. Как следствие, после успешной компиляции GO-программы и создания исполняемого файла не нужно беспокоиться о библиотеках, зависимостях и прочих вещах;
- параллелизм - Go обладает встроенным механизмом параллелизма, который делает его очень удобным инструментом для разработки проектов, где присутствуют задачи, которые надо выполнять в фоне;
- экосистема - в наличии уже разработано большое количество библиотек и интересных проектов. Часть из них приведены ниже.
- удобная разработка - Go включает в себя встроенную систему юнит-тестирования и профайлер, при этом они очень простые в использовании;
- стандартизированная разработка - Go автоматически форматирует написанный код, поэтому читать чужой код и разбираться с существующими проектами очень просто.
Как уже было сказано, для Go существует большое количество готовых инструментов и пакетов, доступных сразу после установки. Они называются stdlib. Все они значительно упрощают жизнь разработчика. Функции, входящие в стандартную библиотеку, предварительно тестируются и отлаживаются разработчиками. В основном они работают без ошибок. Существует также большое количество пакетов, доступных отдельно для установки. Есть и множество готовых интересных проектов, мой самый любимый - https://github.com/cortezaproject/corteza. Приведу перечень наиболее популярных пакетов:
- crypto - готовые библиотеки для работы с криптографией
- compress - для работы с архивами.
- http - очень мощный и простой http-клиент. Благодаря ему можно создавать веб-приложения и поднять свой веб-сервер.
- net - работает напрямую с сокетами, url-адресами и dns.
- encoding/json - работает напрямую с файлами json.
- text/templates - позволяет генерировать html-страницы.
- os - позволяет работать с примитивами операционной системы.
Полный список готовых пакетов можно найти здесь: https://golang.org/pkg/
Означает ли для меня это, что отныне я перестану программировать на php и переключусь только на GO? Конечно же нет. Как и любой другой язык программирования, go обладает рядом недостатков.
- Go не для быстрого старта. На нём нельзя быстро поднять какой-нибудь простой проект для тестирования рынка. Если к вам пришёл заказчик, которому надо быстро, дёшево и максимально просто, то go здесь точно не применим.
- В GO нет встроенной поддержки объектно-ориентированного программирования. Это является небольшой проблемой, потому что я привык структурировать проект по DDD. В GO это тоже можно реализовать, но выглядит не так наглядно, как в PHP. Тем не менее в GO можно имитировать наследование, используя композицию.
- Разработка на нём всегда дольше и дороже. Это связано в первую очередь со слабой документацей. По языку есть только одна очень полезная книга, о которой мало кто знает - «Learning Go» Miek Gieben. В официальной документации по модулям чаще всего перечислены только методы, без какого-либо описания. Это сильно повышает порог вхождения, что неблагоприятно сказывается на размере сообщества языка.
Несмотря на всё это, я вижу GO как вполне достойный язык программирования. Во время изучения он меня пока не разочаровал. Я уже написал на нём несколько проектов, сам синтаксис мне по душе. Если мне нужно написать какой-нибудь простой микросервис, консольное приложение, проект, который будет работать под большой нагрузкой, то мой выбор обязательно упадёт на GO.