Малоизвестные преимущества Go: почему стоит выучить этот язык и с чего начать

8 комментариев
Малоизвестные преимущества Go: почему стоит выучить этот язык и с чего начать

Язык программирования Golang разработали в Google ещё в 2009 году, но стремительно набирать популярность начал только в последние годы. Разработчик Кирилл Роговой в своём блоге рассмотрел некоторые важные особенности Go. Материал доступен даже тем, кто не имеет опыта работы с Go, а в конце статьи можно найти ссылки на полезные ресурсы, которые помогут поближе познакомиться с этим языком.

Иллюстрация: Ashley McNamara

GoDoc

Документации в Go — как и простоте — уделяется особое внимание. GoDoc — это инструмент статического анализа, который автоматически генерирует документацию из кода. В отличие от JavaDoc, PHPDoc или JSDoc, в GoDoc примечательно то, что для аннотирования инструмент использует исключительно английский язык.

GoDoc извлекает максимум информации из кода, чтобы структурировать и форматировать документацию. Она будет содержать всё необходимые «фишки» вроде перекрёстных ссылок, примеров кода и прямых ссылок на репозиторий системы управления версиями. Любой комментарий автоматически отражается в документации. Можно также добавлять фрагменты кода и их запускать прямо в браузере или локально.

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

Статический анализ кода

Значительное место в Go отведено статическому анализу. Подтверждение этому — такие инструменты, как godoc для создания документации, gofmt для форматирования кода, golint для его анализа и выявления возможных ошибок и многие другие. Все они объединены в единую утилиту контроля качества GoMetaLinter, которая запускает параллельно все анализаторы кода. Эти инструменты запускаются и как отдельные приложения командной строки и легко интегрируются с любой средой разработки.

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

Встроенная среда тестирования

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

Чтобы запустить тестирование, достаточно выполнить команду go test. Инструмент позволяет выполнять тесты параллельно, пропускать их, и много чего другого.

Обнаружение состояний гонки

Для достижения многозадачности язык использует легковесные потоки goroutines и каналы в качестве средства взаимодействия между ними. Здесь можно найти их краткий обзор.

Иллюстрация: Golang Talks

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

Авторы 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:

Хотите сообщить важную новость? Пишите в Телеграм-бот.

А также подписывайтесь на наш Телеграм-канал.

Горячие события

Gismart Online Meetup
9 декабря

Gismart Online Meetup

Минск

Читайте также

Изучайте алгоритмы и структуры данных от Skillfactory со скидкой 45%
Изучайте алгоритмы и структуры данных от Skillfactory со скидкой 45%
Изучайте алгоритмы и структуры данных от Skillfactory со скидкой 45%
22 декабря Skillfactory запускает новый курс «Алгоритмы и структуры данных», где будут учить алгоритмам, чтобы показать, как можно улучшить код и уверенно проходить собеседования.
Американские власти обвинили Google в шпионстве за сотрудниками и незаконных увольнениях
Американские власти обвинили Google в шпионстве за сотрудниками и незаконных увольнениях
Американские власти обвинили Google в шпионстве за сотрудниками и незаконных увольнениях
GitHub Octoverse 2020: TypeScript прорвался к первой тройке популярных языков платформы
GitHub Octoverse 2020: TypeScript прорвался к первой тройке популярных языков платформы
GitHub Octoverse 2020: TypeScript прорвался к первой тройке популярных языков платформы
1 комментарий
Google огласила лучшие приложения и игры 2020 года
Google огласила лучшие приложения и игры 2020 года
Google огласила лучшие приложения и игры 2020 года

Обсуждение

4

Крайне поверхностная статья.
Просто оставлю это тут: https://github.com/ksimka/go-is-not-good

35

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

2

Сколько читал/смотрел/был на митапах про го - всегда ощущение WTF, очень странный язык, думаю это потому что он и не задумывался как универсальный язык, гугл сделал его ровно для своих задач (видимо сетевая многозадачность там где нужна скорость си, но где программистам они не доверяют писать на си).
Мне кажется это тухлятина, в этой нише намного интереснее (и при этом производительнее) выглядит Rust, если изучать, то его.

-2

Общеизвестные факты вдруг стали малоизвестными преимуществами. :-) ИМХО, язык хорош для системного программирования и выжимания максимума из железа при написании микросервисов (что похоже стало спорно с релизом .Net Core 2), ну и для serverless под AWS. С критикой по линку вверху согласен частично, некоторые претензии уже не совсем актуальны.

2

Системное программирование? На языке без возможности управлять памятью? Что месье называет системным програмированием?
Максимум из железа? Это откуда инфа? Помниться ребята из дропбокса вроде ключевые компоненты с го переписали на раст и получили весьма значительный прирост производительности.

-2

Под системным, на сегодняшний день, я понимаю все, что лежит ниже web и enterprise.

2

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

2

Попался отличный пост про Го https://vk.com/wall-131043299_21

Спасибо! 

Получать рассылки dev.by про белорусское ИТ

Что-то пошло не так. Попробуйте позже