Включите исполнение JavaScript в браузере, чтобы запустить приложение.
15 окт 2024

Go (Golang): что это за язык программирования и что на нем пишут

В статье мы поговорим о языке программирования Go (Golang). Для чего используется Go и какие у него особенности? Разбираемся в типах данных и синтаксисе Golang. В завершение вы узнаете, что пишут на Go, как установить и начать с ним работать. Подробнее читайте на сайте.

Простой, быстрый, производительный и универсальный — вот что говорят про один из самых популярных инструментов программирования, Go.

Что такое Go

Это компилируемый многопоточный язык программирования, который объединяет преимущества Python, C и C++. От Python унаследована простота синтаксиса и оптимизация процесса разработки, от C++ и C — производительность и высокая скорость исполнения программ.

Go был создан в 2009 году в Google. Полное название — Golang, что означает Google Language. Проект относится к open source ПО, то есть он имеет открытый исходный код — установить и пользоваться им можно бесплатно.

С момента первого релиза 15 лет назад Go уверенно набирает популярность. Сейчас этот язык программирования входит в технологический стек Google и многих других крупных компаний, например, Dropbox, Netflix и Microsoft. В России Google Language используется в продуктах и сервисах Яндекса, Сбера, Lamoda, Wildberries, Ozon и ВКонтакте.

На hh.ru опубликовано почти 1500 вакансий для разработчиков с опытом и без. Медианная зарплата — около 220 000 ₽. Высокий спрос и хорошие зарплатные перспективы делают Golang весьма популярным в ИT-сообществе. По результатам исследования IBS от 2023 года, Go занимает четвертое место в рейтинге самых востребованных средств программирования в России, уступая лидерство только Java, Python и JavaScript.

Особенности языка

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

Строгая статическая типизация

При объявлении переменных нужно указывать типы данных, менять их после этого нельзя. Проверка проходит на этапе компиляции Type checker до исполнения кода. Статическая типизация делает работу программы предсказуемой и надежной, так как позволяет выявить ошибки на стадии отладки, до запуска.

Явный подход к проверке ошибок

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

Быстрая компиляция

В Golang используется встроенный компилятор, который анализирует исходный код и переводит его в понятный машине формат.

Процедура компиляции проходит поэтапно, через лексический и синтаксический анализаторы, компонент Type checker, алгоритмы оптимизации кода для повышения производительности и сокращения объема. Компилятор анализирует логику и архитектуру вашего кода, улучшает его и преобразует в бинарный файл. При этом весь процесс занимает гораздо меньше времени, чем при программировании на Java или C++.

Автоформатирование

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

Автоматическая сборка мусора

Во время работы приложения сборщик мусора маркирует все используемые объекты по трехцветному алгоритму:

  • белые — объекты без маркировки, потенциальные «кандидаты» на сбор;
  • серые — объекты в очереди на проверку взаимосвязей с другими объектами;
  • черные — используемые объекты, которые нельзя трогать.

В результате постоянной маркировки и анализа Garbage collector находит и удаляет ненужные объекты, освобождая память приложения.

Преимущества и недостатки

Писать на Golang легко, программы компилируются и работают быстро, можно создавать ПО для разных платформ. Но базовые возможности ограничены, что затрудняет применение в некоторых проектах.

Простота

Один из принципов, на который опирались создатели Google Language, — облегчение и ускорение процесса разработки. ЯП имеет понятный синтаксис и простую логику, что делает его подходящим выбором для начинающих программистов.

А это означает низкий порог входа и возможность быстро переключиться на проект с разработки на других языках. Код легко читать и править, описание основ программирования укладывается в 20-страничный мануал, а для решения распространенных задач есть готовые пакеты. Например, для работы с сетью, дешифрования данных и других операций не нужно писать код с нуля, достаточно подключить подходящую библиотеку.

С другой стороны, простоту и низкий порог входа можно рассматривать как недостаток. Начинающие программисты могут быстро создать первые проекты, но для изучения специфических концепций требуются месяцы. Пример — горутины, или goroutines: легковесные потоки, которые запущены в функции и выполняются параллельно с ней.

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

Производительность

Google Language задуман как инструмент для создания надежных и быстрых веб-серверов. Язык поддерживает параллелизм, конкурентность и другие концепции, способствующие высокой скорости работы ПО. Обработка больших объемов данных проходит быстрее, чем у программ, созданных в других средах программирования.

Универсальность

Golang — кроссплатформенный язык, на нем можно разрабатывать сервисы для Linux, Windows, macOS и FreeBSD. Если программу писали для Linux, код можно перекомпилировать и быстро адаптировать под Windows или другую операционную систему.

Функциональность

В Golang есть много полезных функций:

  • сборка мусора;
  • лексическая область видимости и функции первого класса, как в JavaScript;
  • пакетная архитектура;
  • системные вызовы для взаимодействия с ядром операционной системы.

Этих возможностей достаточно для создания многих веб-проектов и системных утилит. Но для более сложных сервисов функциональности может не хватать.

Например, Go не поддерживает:

  • наследование;
  • неявные числовые преобразования;
  • перегрузку операторов;
  • обработку исключений;
  • типизацию на уровне объектов.

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

Синтаксис Golang

Структура программы напоминает модульную архитектуру Python. Файлы с исходным кодом распределены по пакетам, в начале каждого файла нужно указывать пакет с помощью команды package. Чтобы импортировать пакет в программу, используется команда import:

import ИмяПакета

Для выполнения арифметических операций используются стандартные операторы +, -, *, /, %, инкремент для увеличения или уменьшения значения переменной на единицу.

Условные конструкции похожи на С:

if Условие {

Операция

}

Для реализации альтернативной логики используется конструкция if — else:

if Условие {

Операция1

}else{

Операция2

}

Объявление функций:

func ИмяФункции (Параметры) (Возврат) {

Операция

}

Здесь «Параметры» — это список принимаемых переменных, а «Возврат» — переменные, которые возвращает функция, если это предусмотрено логикой программы.

В циклах используется оператор for:

for Счётчик; Условие; ИзменениеСчётчика{

Операции

}

Пример кода, который инициализирует счетчик с единицы, проверяет выполнение условия i < 5, при каждой проверке увеличивает счетчик на единицу и выводит в консоль значение i:

for i := 1; i < 5; i++{

fmt.Println(i)

}

Обратите внимание: ставить точку с запятой после каждой строки не нужно.

Типы данных Golang

За объявление переменной отвечает var: 

var ИмяПеременной ТипДанных

В имени переменной можно задать любой идентификатор или несколько идентификаторов через запятую при объявлении группы переменных.

Так как одна из особенностей языка — строгая типизация, то здесь же нужно задать встроенный или пользовательский тип данных.

Примеры встроенных типов:

  • целочисленные:
  • int8;
  • int16;
  • int32 и синоним rune;
  • int64;
  • uint8 и синоним byte;
  • uint16;
  • uint32;
  • uint64;
  • числа с плавающей точкой для дробных значений:
  • float32;
  • float64;
  • комплексные числа:
  • complex64;
  • complex128;
  • логический bool — true или false;
  • строки string — задают последовательность символов в кавычках.

Также допускается неявная типизация, когда переменная инициирована только значением. Например:

var name = "GitVerse"

Компилятор понимает, что переменная относится к string. При этом, если после «var name» не указано имя, компилятор выдаст ошибку.

Что пишут на Go

ЯП используется практически в любых отраслях и направлениях разработки. Так как это open source проект, в сети доступны примеры решения разных задач и подробная документация. Наибольшее распространение язык получил в следующих сферах:

  • создание веб-приложений;
  • системное программирование;
  • микросервисы;
  • облачные решения;
  • программы для управления сетевой инфраструктурой;
  • управление БД;
  • инструменты администрирования;
  • блокчейн-приложения.

Как установить и начать работать

Установочный пакет можно скачать с официального сайта для разработчиков go.dev. Выберите операционную систему, загрузите и запустите программу, следуя подсказкам системы.

По состоянию на июнь 2024 года доступны версии для следующих ОС:

  • Windows — 10 и ранее, 64 bit;
  • macOS (ARM64) — 11 и ранее, 64 bit;
  • macOS (x86-64) — 10.15 и ранее, 64 bit;
  • Linux — 2.6.32 и ранее, 64 bit.

После завершения инсталляции проверьте корректность загрузки всех компонентов. Для этого откройте консоль и выполните команду go version. Если установка прошла успешно, система выведет сообщение с текущей версии ПО.

Писать код можно в IDE, например, LiteIDE, текстовом редакторе, Visual Studio Code или специализированной среде для Go-разработчиков. Хранить файлы с исходным кодом, а также совместно дорабатывать продукт, обмениваться идеями и привлекать контрибьюторов для развития проектов удобно на платформе GitVerse.