Go — относительно новый язык. О нем было объявлено в ноябре 2009 года, а версия 1.0 вышла в марте 2012 года. Это вызывает некоторые опасения по поводу зрелости языка. Если сравнить с другими основными языками, используемыми в настоящее время, такими как Python, выпущенный в 1991 году, PHP в 1995 году, Java, Javascript и Ruby, выпущенный в 1996 году, .Net в 2002 году. Не говоря уже о таких языках, как C (1972 год) и C++ (1985 год). . Эти опасения по поводу того, что язык новый, вполне разумны. Языку есть куда расти и развиваться.

Однако если подумать, когда разрабатывались эти старые языки, проблемы, которые они пытались решить, сильно отличались от сегодняшних. Вот почему тот факт, что он является новым языком, делает его очень сильным для его основной цели. Параллельное программирование. Язык был разработан для решения современных проблем и для работы в распределенной среде. Вот почему он действительно хорошо подходит для облачных приложений.

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

Параллельная модель

Параллелизм является частью языка. В то время как другие языки поддерживают параллелизм, Go был разработан для этого. Это означает, что инструменты, доступные для создания параллельного кода, потрясающие. Одна из целей, которую хотели достичь создатели Go (Роберт Гриземер, Роб Пайк и Кен Томпсон), заключалась в том, чтобы сделать код Go очень читабельным и идиоматичным. Это действительно важный момент, если вам нужно, например, поддерживать устаревший код. Если вы хотите узнать больше о модели параллелизма в Go, ознакомьтесь с другой моей статьей Горутины и каналы — параллельное программирование в Go.

Строго типизированный язык

Некоторые люди могут не согласиться с этим, но для меня важно не делать глупых ошибок, которых вы могли бы избежать, если бы у вас была строгая система типов при компиляции. Распределенные системы трудно отлаживать и устранять неполадки (поэтому нам нужна куча инструментов, чтобы упростить эту задачу). Так что любые ошибки, которых мы можем избежать перед отправкой кода в производство, для меня хорошо.

Единая скомпилированная нативная сборка

Когда вы компилируете код go, он выводит одну нативную сборку. Среда выполнения Go компилируется как часть этой нативной сборки. Это означает, что вам не нужно устанавливать go на машину, на которой вы хотите запустить сборку. Это родное. Тот факт, что генерируется только одна сборка, также очень полезен. Если вы хотите распространять эту сборку, вам не нужно беспокоиться о том, что ее зависимости находятся в нужных местах или вообще присутствуют. Они также скомпилированы как часть этой единой собственной сборки. Удивительно, не так ли?

Это также означает, что образы go (если вы создаете контейнеры с помощью Docker) минимальны. Проверьте эту статью для сравнения с другими компилируемыми языками. Внимание, спойлер: Go — самый маленький из них.

Поддержка версии 1

Взгляните на эту цитату с https://golang.org/doc/go1compat:

Предполагается, что программы, написанные в соответствии со спецификацией Go 1, будут продолжать правильно компилироваться и работать без изменений в течение всего времени существования этой спецификации. В какой-то неопределенный момент может появиться спецификация Go 2, но до этого времени программы Go, которые работают сегодня, должны продолжать работать даже при появлении будущих «точечных» выпусков Go 1 (Go 1.1, Go 1.2 и т. д.).

Это очень сильное заявление. Если вы напишете какой-нибудь код go, вы можете безопасно обновить используемую версию go без существенных изменений в вашем коде (в большинстве случаев вообще без изменений!). Это означает, что вы получаете все большие улучшения языка и стандартных библиотек практически бесплатно.

Представление

Go имеет очень хорошую производительность, если сравнивать его с такими языками, как Java, PHP, Node.js и Python. Однако он не так хорош, как старый добрый C. Вот действительно хорошая статья со сравнением языков: https://www.toptal.com/back-end/server-side-io-performance-node-php-java-go

Последние мысли

Дизайнерские решения, которые были приняты для языка программирования go, и проблемы, которые он должен был решить, делают его очень подходящим для облачных приложений. Не случайно такие инструменты, как Docker, Kubernetes и Terraform, написаны на ходу. В языке есть много возможностей для улучшений, и многое еще развивается, но на сегодняшний день это уже очень хороший мощный язык.