Язык программирования Golang разработали в Google ещё в 2009 году, но стремительно набирать популярность начал только в последние годы. Разработчик Кирилл Роговой в своём блоге рассмотрел некоторые важные особенности Go. Материал доступен даже тем, кто не имеет опыта работы с Go, а в конце статьи можно найти ссылки на полезные ресурсы, которые помогут поближе познакомиться с этим языком.
GoDoc
Документации в Go — как и простоте — уделяется особое внимание. GoDoc — это инструмент статического анализа, который автоматически генерирует документацию из кода. В отличие от JavaDoc, PHPDoc или JSDoc, в GoDoc примечательно то, что для аннотирования инструмент использует исключительно английский язык.
GoDoc извлекает максимум информации из кода, чтобы структурировать и форматировать документацию. Она будет содержать всё необходимые «фишки» вроде перекрёстных ссылок, примеров кода и прямых ссылок на репозиторий системы управления версиями. Любой комментарий автоматически отражается в документации. Можно также добавлять фрагменты кода и их запускать прямо в браузере или локально.
GoDoc — единственный инструмент создания документации, который использует всё сообщество: документация для всех библиотек и приложений на Go имеет один формат, что помогает сберечь массу времени на её изучение.
Статический анализ кода
Значительное место в Go отведено статическому анализу. Подтверждение этому — такие инструменты, как godoc для создания документации, gofmt для форматирования кода, golint для его анализа и выявления возможных ошибок и многие другие. Все они объединены в единую утилиту контроля качества GoMetaLinter, которая запускает параллельно все анализаторы кода. Эти инструменты запускаются и как отдельные приложения командной строки и легко интегрируются с любой средой разработки.
Статический анализ кода — не новая вещь в программировании, но Go позволяет быстро и просто провести дотошный анализ по всем направлениям и бережёт массу времени. Можно запросто создавать и свои анализаторы: для этого есть специальные встроенные пакеты для парсинга и работы с источниками Go.
Встроенная среда тестирования
В Go есть встроенный инструмент для тестирования кода с акцентом на простоту и эффективность. Он предлагает простейший API и содержит минимум утверждений. Его можно использовать для тестирования и профайлинга, а также добавлять исполняемые образцы кода.
Чтобы запустить тестирование, достаточно выполнить команду go test. Инструмент позволяет выполнять тесты параллельно, пропускать их, и много чего другого.
Обнаружение состояний гонки
Для достижения многозадачности язык использует легковесные потоки goroutines и каналы в качестве средства взаимодействия между ними. Здесь можно найти их краткий обзор.
Одной из проблем проектирования многопоточных приложений является риск такой ошибки, как состояние гонки. Это происходит, когда несколько конкурирующих операций завершаются не в том порядке, в котором ожидается, что может привести к огромному количеству ошибок, которые особенно сложно обнаружить.
Авторы Go серьёзно подошли и к этой проблеме, создав мощное средство для обнаружения гонок, полностью интегрированное в инструментарий языка. Подробнее о Race Detector можно прочитать в блоге Go.
Доступность
Все функции Go можно выучить за один вечер. Здесь есть стандартная библиотека, некоторые библиотеки требуют специальных знаний, но пары часов вполне хватит, чтобы уверенно написать простой HTTP-сервер или приложение командной строки. Язык имеет отличную документацию, а большинство сложных тем команда создателей проекта уже осветила в своём блоге.
Go значительно проще освоить, чем Java, Javascript, Ruby, Python или даже PHP. Среду разработки достаточно легко настроить, а от команды понадобится намного меньше усилий для создания готового кода.
Рефлексия
Рефлексия — это способность добраться до различного рода метаинформации о таких конструкциях языка, как переменные или функции. Так как Go — статически типизированный язык, он имеет некоторые ограничения в плане обобщённого программирования, особенно в сравнении с динамическими Javascript или Python.
Также в Go нет так называемых дженериков, что несколько лишает его преимуществ абстрактного подхода в программировании. Но многие считают это плюсом Go из-за сложности, которую привносят обобщённые типы.
Философия Go заключается в том, чтобы не переусложнять код, что свойственно и динамическим языкам. В Go нужно по возможности придерживаться статических типов и использовать интерфейсы, когда точно известно, какие типы применяются. Интерфейсов в Go много, и они имеют свои особенности.
Однако в некоторых случаях достаточно трудно определить тип данных, с которым разработчик имеет дело. Для этого есть замечательный встроенный пакет Reflect, который позволяет оперативно определить тип переменной во время работы программы.
Ограничения
В Go есть стандарт написания кода, которого все должны придерживаться. Есть единая встроенная среда тестирования, входящая в набор инструментальных средств. Есть правила структурирования и сопровождения кода, подбора имён, реализации многозадачности.
Хотя может показаться, что ограничений в языке слишком много, это значительно экономит время команде на выбор инструментов и помогает избежать проблем с коммуникацией, а также вносит чёткость при создании архитектуры нового кода и позволяет проще разобраться в уже существующем.
Культура
Часто говорят, что при изучении нового естественного языка человек также погружается в культуру того народа, который на нём говорит. И чем больше языков изучает человек, тем больше меняется его личность.
То же самое относится и к компьютерным языкам. Независимо от того, как человек будет применять тот или иной язык в будущем, он всегда позволяет с другого ракурса посмотреть на программирование в целом или же на некоторые конкретные методы, будь то функциональное программирование, сопоставление с образцом, или прототипное наследование. Каждый новый язык расширяет круг подходов и инструментарий разработчика, а также изменяет его взгляд на качественное программирование в общем.
И Go в этом контексте — ценное приобретение. Код, созданный на нём, должен быть простым и понятным, без излишних абстракций и с акцентом на удобство в сопровождении. Go создан для того, чтобы сфокусироваться непосредственно на написании кода и не отвлекаться на подбор инструментов и настройку окружения. В нём «должен быть только один способ написать код».
Полезные ресурсы
Интерактивный тур по Go, с которого можно начать знакомство с языком.
Более подробно о преимуществах Go – в блогах на Medium:
- Why should you learn Go? — Keval Patel
- Farewell Node.js — TJ Holowaychuk
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.