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

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

«Go, также часто называемый golang, - это язык программирования с открытым исходным кодом, который упрощает создание простого, надежного и эффективного программного обеспечения».

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

История:

Go - это язык программирования, разработанный инженерами Google Робертом Гриземером (Hotspot и JVM), Робом Пайком (UNIX и UTF-8) и Кеном Томпсоном ( B, C, UTF-8).

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

Официально о Go было объявлено в ноябре 2009 года. Он используется в некоторых производственных системах Google, а также в других компаниях.

Почему именно Голанг?

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

Еще одна причина для перехода - профессиональные возможности, доступные через сам язык. Согласно результатам опроса разработчиков в 2019 году, Golang оказался одним из самых высокооплачиваемых языков программирования.

Вот четыре основных причины, по которым стоит начать с Голанга:

1. Производительность: Speed, Go повышает доступность и надежность услуг.

2. Надежность. Golang - это продвинутая и надежная система, предлагающая отличные встроенные способы обработки ошибок. Go повышает удобочитаемость кода благодаря своей простоте.

3. Производительность. Разработчики могут легко освоить Golang и адаптироваться к нему и быстро стать продуктивными.

4. Эффективность. Эффективно, сводится к одному двоичному файлу.

Особенности Golang:

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

Дизайн языка. Разработчики языка приняли сознательное решение сделать язык простым и легким для понимания. Вся спецификация представлена ​​на небольшом количестве страниц, и некоторые интересные дизайнерские решения были приняты благодаря объектно-ориентированной поддержке языка, что ограничивает возможности. В этом отношении язык самоуверен и рекомендует идиоматический способ достижения цели. Он предпочитает композицию наследованию, а его система типов элегантна и позволяет добавлять поведение без слишком сильного связывания компонентов. На языке го это мантра «Делай больше с меньшими затратами».

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

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

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

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

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

Преимущества Голанга:

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

Go Is Fast: Go - действительно быстрый язык. Поскольку Go скомпилирован в машинный код, он, естественно, превосходит языки, которые интерпретируются или имеют виртуальное время выполнения. Программы Go также компилируются очень быстро, и получаемый двоичный файл очень мал.

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

Статический ввод. Go - это язык со строгой статической типизацией. Есть примитивные типы, такие как int, byte и string. Также есть структуры. Как и любой строго типизированный язык, система типов позволяет компилятору выявлять целые классы ошибок. Go также имеет встроенные типы для списков и карт, и они просты в использовании.

Типы интерфейсов. Go имеет интерфейсы, и любая структура может удовлетворить интерфейс, просто реализовав свои методы. Это позволяет нам отделить зависимости в нашем коде. Затем мы можем имитировать наши зависимости в тестах. Используя интерфейсы, мы можем писать более модульный, тестируемый код. Go также имеет первоклассные функции, которые открывают возможность писать наш код в более функциональном стиле.

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

Поддержка тестирования. Поддержка тестирования встроена в стандартную библиотеку. Нет необходимости в дополнительной зависимости. Если у нас есть файл с именем thing.go, запишите наши тесты в другой файл с именем thing_test.go и запустите «go test». Go быстро выполнит эти тесты.

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

Сборка мусора. Управление памятью в Go намеренно упрощено, чем в C и C ++. Динамически выделяемые объекты собираются сборщиком мусора. Go делает использование указателей более безопасным, поскольку не поддерживает арифметические операции с указателями. Это также дает нам возможность использовать типы значений.

Более простая модель параллелизма. Хотя параллельное программирование никогда не бывает простым, Go делает его проще, чем на других языках. Почти тривиально создать легкий поток, называемый «горутиной», и общаться с ним через «канал». Возможны более сложные схемы.

Недостатки Голанга:

Как мы уже говорили выше, Go - хороший язык. У него чистый синтаксис. Он имеет быстрое время выполнения. В этом много хорошего. Однако язык программирования - это не только его синтаксис. Вот некоторые вещи, с которыми мы столкнулись.

Без дженериков. Во-первых, слон в комнате. В Go нет универсальных шаблонов. При переходе с таких языков, как Java, это серьезное препятствие. Это означает снижение уровня повторного использования в нашем коде. Хотя в Go есть первоклассные функции, если мы напишем такие функции, как «map», «reduce» или «filter», которые работают с коллекцией одного типа, мы не сможем повторно использовать те же самые функции для коллекции другого типа. Есть способы справиться с этим, но все они в конечном итоге требуют написания большего количества кода. Это снижает производительность и ремонтопригодность.

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

Плохая поддержка библиотеки. Библиотечная поддержка Go нечеткая. Наш API интегрируется с Contentful, у которого нет официально поддерживаемого Go SDK. Это означало, что нам пришлось написать (и поддерживать!) ТОННУ кода для запроса и анализа данных из Contentful. Нам также пришлось полагаться на стороннюю библиотеку Elasticsearch. Пакеты Go SDK, предоставляемые поставщиками, не пользуются такой популярностью, как их аналоги на Java, Ruby или JavaScript.

Сложное сообщество. Сообщество Go может не принимать предложения. Рассмотрим эту проблему в репозитории GitHub для golint: https://github.com/golang/lint/issues/65. Кто-то запросил возможность для golint сбой сборки при обнаружении предупреждений (что мы и делаем в нашем проекте!). Сопровождающий немедленно отклонил эту идею. Достаточное количество людей прокомментировали проблему, и через год сопровождающий добавил запрошенную функцию.

Сообщество Go также, похоже, не любит веб-фреймворки. Хотя HTTP-библиотека Go охватывает многое, она не обеспечивает поддержки параметров пути, очистки и проверки ввода, а также многих сквозных проблем, которые часто встречаются в веб-приложениях. У разработчиков Ruby есть Rails, у разработчиков Java есть Spring MVC, а у разработчиков Python есть Django. Но многие разработчики Go предпочитают избегать фреймворков. Тем не менее, фреймворки все еще существуют. Много их! Но практически невозможно выбрать тот, от которого не откажутся после того, как вы начали с ним проект.

Сломанное управление зависимостями. Долгое время в Go не было стабильного официального менеджера пакетов. После многих лет просьб со стороны сообщества проект Go недавно выпустил godep. До этого пробел восполняли многие инструменты. В нашем проекте мы используем очень способного губернатора. Но это означает, что сообщество раздроблено, и это может сильно сбить с толку разработчиков, плохо знакомых с Go. Кроме того, практически все управление пакетами поддерживается репозиториями Git, история которых может измениться в любой момент. Сравните это с чем-то вроде Maven Central, который никогда не удалит или не изменит библиотеку, от которой зависит ваш проект.

Где?

Google Откройте для себя 7 крупнейших компаний, использующих Golang для своих продуктов - Google. Golang был разработан инженерами Google и часто используется там для внутренних проектов. Twitch Откройте для себя 7 крупнейших компаний, использующих Golang для своих продуктов - одним из примеров Golang является Twitch. Его ценят за простоту, безопасность, эффективность и удобочитаемость, что означает, что он отлично справляется с проблемами, возникающими при отображении видео в реальном времени и одновременных чатах большого количества пользователей. Dropbox, один из лидеров в сфере услуг облачных вычислений, представляет собой еще один отличный пример крупной компании, использующей Golang. Это позволило им улучшить кэширование, улучшить стандартный интерфейс ошибок, позволить программистам программно генерировать операторы SQL и реализовать полнофункциональные клиентские библиотеки Memcache.