Вот некоторые удивительные преимущества Go, о которых вы мало слышите

1657141246 vot nekotorye udivitelnye preimushhestva go o kotoryh vy malo slyshite

Кирилл Роговой

ui7rVcmmwr3edNFdjfq0djhPEzAonPSJukfX
Иллюстрация из https://github.com/ashleymcnamara/gophers

В этой статье я обсуждаю, почему следует дать Go шанс и с чего начать.

Голанг – это язык программирования, который вы могли слышать много за последние несколько лет. Несмотря на то, что он был создан еще в 2009 году, он стал набирать популярность только в последние годы.

5-ox2W2rahUeBEg6F-Pen5p5rh28x8whSRuM
Популярность Golang по данным Google Trends

Эта статья не об основных преимуществах Go, которые вы обычно видите.

Я хотел бы представить вам некоторые небольшие, но все же важные функции, о которых вы узнаете только после того, как решите попробовать Go.

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

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

Мы рассмотрим такие темы, как:

  • GoDoc
  • Статический анализ кода
  • Встроенные тестирование и профилирование рамки
  • Выявление условий гонки
  • Кривая учеба
  • Рефлексия
  • мысленность
  • Культура

Обратите внимание, что список не соблюдает определенный порядок. Это также самоуверенно, как ад.

GoDoc

Документация в коде воспринимается очень серьезно в GO. Так же и простота.

Godoc – это статический инструмент анализа кода, который создает прекрасные страницы документации прямо из вашего кода. Примечательная вещь GoDoc заключается в том, что он не использует никаких дополнительных языков, таких как JavaDoc, PHPDoc или JSDoc, для аннотирования конструкций в вашем коде. Просто английский.

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

Все, что вы можете сделать, это добавить старое хорошо // MyFunc transforms Foo into Bar Вид комментариев, который также отображается в документации. Вы даже можете добавить примеры кода, которые есть фактически запущен через веб-интерфейс или локально.

GoDoc – это единственный механизм документации для Go, которым пользуется все сообщество. Это означает, что каждая библиотека или приложение, написанное в GO, имеет одинаковый формат документации. В конце концов это сэкономит вам кучу времени при просмотре этих документов.

Вот, например, страница GoDoc для моего недавнего домашнего проекта: pullkee – GoDoc.

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

Go в значительной степени полагается на статический анализ кода. Примеры включают godoc для документации, gofmt для форматирования кода, golint для линирования стиля кода и многие другие.

Их так много, что существует даже проект «все включено» под названием gometalinter, объединяющий их все в одну утилиту.

Эти инструменты обычно реализуются как автономные программы командной строки и легко интегрируются с любой кодирующей средой.

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

Создать собственные анализаторы очень просто, поскольку Go имеет специальные встроенные пакеты для анализа и работы с источниками Go.

Вы можете узнать больше из этого разговора: Gothamgo Kickoff Meetup: GO Static Analyshile Инструменты Алана Донована.

Встроенная структура тестирования и профилирования

Пытались ли вы когда-нибудь выбрать структуру тестирования для проекта Javascript, который начинаете с нуля? Если да, вы могли бы понять эту борьбу через паралич такого анализа. Возможно, вы также поняли, что не используете 80% выбранного вами фреймворка.

Проблема повторяется, когда вам нужно выполнить надежное профилирование.

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

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

Выявление условий гонки

Возможно, вы уже знаете о Goroutines, которые используются в Go для одновременного выполнения кода. Если вы нет, вот очень краткое объяснение.

Одновременное программирование в сложных программах никогда не бывает легким, независимо от конкретной техники, отчасти из-за возможности конкуренции.

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

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

Вы можете прочитать больше об этом и узнать, как им пользоваться здесь: Представляем Go Race Detector – блог Go.

Кривая учеба

Вы можете выучить все языки GO за один вечер. Я имел это в виду. Конечно, есть стандартная библиотека и лучшие практики в различных, более конкретных сферах. Но два часа было бы достаточно времени, чтобы вы уверенно написали простой HTTP-сервер или приложение командной строки.

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

Go гораздо легче привлечь к вашей команде, чем Java (и семья), Javascript, Ruby, Python или даже PHP. Среда легко настроена, а инвестиции, которые ваша команда нуждается, гораздо меньше, прежде чем они смогут завершить ваш первый рабочий код.

Рефлексия

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

Учитывая, что Go является статически типизированным языком, он подвергается ряду разнообразных ограничений, когда речь идет о более свободно типизированном абстрактном программировании. Особенно по сравнению с такими языками, как Javascript или Python.

Кроме того, Go не реализует концепцию под названием Generics, что делает работу с несколькими типами абстрактным способом еще более сложной. Тем не менее, многие считают, что это на самом деле полезно для языка из-за количества сложности, которое приносят Generics. И я полностью согласен.

Согласно философии Go (которая сама по себе является отдельной темой), вам следует упорно стараться не переделывать свои решения. Это также касается динамически типизированного программирования. Соблюдайте как можно больше статических типов и используйте интерфейсы, когда точно знаете, с какими типами вы имеете дело. Интерфейсы Go очень мощные и вездесущие.

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

Чтобы это сделать, вам необходим инструмент для проверки всех данных во время выполнения, который действует по-разному в зависимости от типа и структуры. Рефлексия на спасение! Go имеет первоклассный пакет отображения, чтобы сделать ваш код таким же динамичным, как и в языке вроде Javascript.

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

Вы можете прочитать больше об этом: Законы отображения — блог Go.

Вы можете прочитать реальный код из источников пакетов JSON здесь: src/encoding/json/encode.go — исходный код

мысленность

Есть ли такое слово, кстати?

Исходя из мира Javascript, один из самых сложных процессов, с которыми я столкнулся, заключался в выборе условий и инструментов, которые мне нужно использовать. Как мне сжимать свой код? Какую библиотеку тестирования я должен использовать? Как я должен заниматься структурой? На какие парадигмы и подходы программирования я должен опираться?

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

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

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

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

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

Как следствие, большинство проектов Go выглядят достаточно схожими с точки зрения кода.

Культура

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

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

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

И Go – отличная инвестиция здесь. Основной столб культуры Go – это простой, приземленный код, не создавая многих лишних абстракций и ставить ремонтопригодность наверху. Часть культуры также тратит больше времени на работу над кодовой базой, вместо того чтобы возиться с инструментами и средой. Или выбор между разными вариациями этих.

В Go также говорится, что «должен быть только один способ делать что-то».

Небольшое примечание. Это тоже отчасти верно, что Go обычно мешает, когда вам нужно построить относительно сложные абстракции. Ну, я бы сказал, что это компромисс для его простоты.

Если вам нужно написать много абстрактного кода со сложными связями, вам лучше использовать такие языки, как Java или Python. Однако даже когда это неочевидно, это очень редко.

Всегда используйте самый лучший инструмент для работы!

Вывод

Может быть, вы уже слышали о Go. Или, возможно, это нечто, что некоторое время оставалось вне вашего радара. В любом случае, скорее всего, Go может быть очень достойным выбором для вас или вашей команды, когда вы начинаете новый проект или улучшаете существующий.

Это не полный список всех удивительных вещей Go. Только недооценены.

Пожалуйста, попробуйте Go из A Tour of Go, который является невероятным местом для начала.

Если вы хотите узнать больше о преимуществах Go, вы можете просмотреть эти ссылки:

Поделитесь своими наблюдениями в комментариях!

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

Всегда ищите лучшие инструменты для своего дела!

Если вам нравится эта статья, пожалуйста, подумайте о том, чтобы следовать за мной больше, и нажмите на эти забавные маленькие зеленые руки прямо под этим текстом для обмена. ???

Проверьте мой Github и следите за мной в Twitter!

Добавить комментарий

Ваш адрес email не будет опубликован.