что можно писать на golang
Язык программирования Go: мнения и перспектива
Go – это язык программирования, который был разработан корпорацией Google. Часто его еще называют «Golang» – сокращение от «Google language». Это компилируемый и многопоточный язык, релиз которого состоялся в ноябре 2009 года, а самый свежий выпуск 1.6 датируется февралем 2016 года. Одной из ключевых фигур, которые принимали участие в создании Go, является Роб Пайк, известный разработчик языков программирования, а также операционных систем, в данный момент работающий в Google. Выступая на одной из конференций, он отметил, что язык Go – это попытка перенять лучшие стороны таких языков, как C++ и Java.
В этой статье мы попробуем разобраться, насколько популярен язык Go, есть ли у него перспективы развития и что об этом языке думают сами программисты.
Применение Golang
Язык Go разрабатывался как язык для создания различных высокоэффективных программ, однако большинство программистов сходятся во мнении, что лучше всего он подходит для создания веб-приложений (в качестве back-end). При этом Go дает возможности писать и другие проекты, к примеру, Docker, InfluxDB и Kubernetes. По сути, применение языка Go ограничивается тремя основными направлениями: сетевое программное обеспечение, консольные утилиты и бэкенд.
Одной из отличительных особенностей языка является оригинальная система типов: в языке отсутствует наследование (один из принципов объектно-ориентированного программирования). Также в Go используется сокращенный синтаксис определения переменных и синтаксис анонимных функций.
Еще одна особенность этого языка – параллелизм, который заключается в том, что любая функция может быть выполнена одновременно с другой.
Так как Go является одним из молодых языков программирования, регулярно возникают обсуждения целесообразности его использования.
Плюсы языка Go
У языка Go есть несколько положительных черт, выделяемых программистами, которые на нем пишут.
Во-первых, это его простота. Язык Go разрабатывался в качестве замены C: его высокая производительность почти сопоставима с языком Си, но более простой синтаксис дает возможность разрабатывать приложения гораздо быстрее (к примеру, как на Python). При этом многие разработчики изучают этот язык после Python или PHP либо используют два языка в связке (Python/Go и PHP/Go). Упрощенный синтаксис облегчает не только написание своего собственного кода, но и чтение кода, написанного другими программистами, что особенно важно в командной работе. Эта особенность Go, в свою очередь, ведет к другому важному факту: быстрое освоение Go позволяет перевести внимание с изучения самого языка на изучение программирования в целом.
Тут необходимо сделать отступление и сказать о том, что желание создать простой язык программирования родилось у разработчиков Google неслучайно: изначально они задумывали Go как быстро изучаемый язык, который запросто могут выучить несколько не очень опытных программистов для того, чтобы затем вместе написать какое-нибудь приложение. Именно поэтому некоторые считают язык Go языком, пригодным для больших корпораций, где в разработке продуктов будет участвовать множество разных людей. Как уже было замечено выше, простой и понятный синтаксис ведет к тому, что программистам Go не нужно вводить какие-то другие стандарты, обозначения или комментарии – они и без этого отлично поймут код друг друга. Многословность Go радует одних разработчиков и огорчает других, но именно благодаря ей код Go читается так легко.
Поэтому некоторые компании (к примеру, CrowdStrike) сознательно переходят с других языков программирования на Go для того, чтобы в дальнейшем более легко расширять пул своих разработчиков.
Во-вторых, Go имеет большое количество библиотек, благодаря которым можно выполнить практически любую поставленную задачу. Многое можно реализовать, используя только стандартную библиотеку Go, которая легко читается, а также отличается хорошим качеством и скоростью. Отдельного внимания заслуживает эффективное взаимодействие с библиотеками языка Си; некоторые отмечают, что Go-библиотеки по факту являются просто обертками над С-библиотеками.
В-третьих, Go это компилируемый язык, на котором можно быстро написать необходимое приложение. Go имеет такую же строгую статическую типизацию, как Pascal, но в то же время он имеет гораздо больший прикладной характер (и это роднит его с Python). Тут необходимо отметить высокую производительность Golang, которая характерна для компилируемых языков. Также в Go значительно облегчена кроссплатформенность.
Нельзя не отметить и четкую направленность языка: в отличие от PHP, на котором пишут большие проекты, Go больше предназначен для некрупных сервисов, которые необходимо быстро внедрить и которые должны отличаться чрезвычайной надежностью (так называемое robust software).
Развертка Go-приложения также выглядит намного проще, чем развертка приложения, написанного на PHP. Программируя на Go, вы можете создать артефакты для всех операционных систем или архитектур процессора, вам не нужно будет устанавливать Go на используемые вами сервера.
Синтаксис Go может быть непривычен тем, кто до этого программировал на PHP или Python. Если рассматривать код Go в сравнении с PHP, то Go не имеет объектов или классов, зато в нем есть структура, а точнее тип, который содержит именованные поля:
Еще одной причиной, по которой Go завоевывает все большую популярность, является наличие go fmt – инструмента, который помогает стандартизировать код. А использование go vet поможет вам найти возможные проблемы в коде. Иными словами, авторы языка Go попытались максимально упросить задачу разработки приложений на этом языке, особенно для новичков.
Именно поэтому многие на данный момент считают Go одним из лучших языков программирования и советуют изучать его не только студентам, но и школьникам. Кстати, такой прецедент уже был: учитель научил несколько 11-летних школьников писать и разбираться в коде на таком уровне, что они смогли написать генератор фракталов Мандельброта. А главное, для этого ему понадобилось всего 12-13 часов!
Минусы языка Go
В качестве негативной стороны Go часто называют его малую на данный момент распространенность – действительно, есть куда более распространенные языки программирования, которые используются для выполнения большинства задач. Значит ли это, что изучать Go не стоит? Совсем нет. Существует множество корпораций, которые используют язык Go в своих разработках. В первую очередь это, конечно же, Google Inc., а также Basecamp, BBC Worldwide, Canonical, DigitalOcean, Dropbox, eBay, Yahoo и многие другие компании по всему миру. Поэтому перспективы у этого языка программирования точно есть. Безусловно, программисты Go могут быть менее востребованы, чем, к примеру, PHP-разработчики, однако и конкуренция ниже, а значит, выше шанс найти интересную и хорошо оплачиваемую работу.
Те, кто пытаются предугадать перспективы языка Go, также говорят о другом минусе, который фактически является противоположностью предыдущего пункта: из-за легкости языка, а значит, и низкого порога вхождения, количество людей, программирующих на Go, будет расти в геометрической прогрессии, при этом качество кода и сами проекты будут оставлять желать лучшего. Похожая ситуация в начале XXI века случилась с PHP, когда на этом языке стало писать множество начинающих программистов, не очень волнующихся за работоспособность своего кода (и готовых получать небольшую плату за свой труд). Главное отличие PHP от Go на данный момент заключается в том, что PHP в итоге стал полноценным языком с богатой инфраструктурой и множество фреймворков, без знания которых вы едва ли найдете хорошую работу. Go же позиционируется как простой язык, поэтому перспективы его развития не очень определены.
В рамках данной статьи я не буду останавливаться на сугубо технических моментах, которые вызывают недоумение у программистов, так как это абсолютно субъективные впечатления. Вопросы часто вызывает система типов, отсутствие дженериков, перегрузки операторов, возможности расширить ключевые слова, а также многое другое. Безусловно, Go не является идеальным языком, и при первом знакомстве с ним кому-то может не понравится различия с более привычным ему языком программирования.
Вывод
Язык Go еще достаточно молод для того, чтобы говорить о какой-то определенной перспективе. Однако уже сейчас многие воспринимают Go как современный или даже передовой язык, который способствует развитию языков программирования в целом. Даже если вы уже долго время являетесь сторонником какого-то определенного языка программирования, Go может предложить вам много новых инструментов, которые расширят ваш кругозор или даже вызовут желание разрабатывать приложения на Go. При этом вы потратите минимальное время на знакомство с синтаксисом этого языка (вплоть до пары дней), поэтому, даже если ваши ожидания в отношении Go не оправдаются, вы получите интересный и ценный опыт.
Golang: основы для начинающих
Авторизуйтесь
Golang: основы для начинающих
Golang, или Go — язык программирования, начало которого было положено в 2007 году сотрудниками компании Google. В этом руководстве по Golang мы рассмотрим, как установить необходимое ПО и написать свою первую программу.
Go поддерживает типобезопасность, возможность динамического ввода данных, а также содержит богатую стандартную библиотеку функций и встроенные типы данных вроде массивов с динамическим размером и ассоциативных массивов.
С помощью механизмов многопоточности Go упрощает распределение вычислений и сетевого взаимодействия, а современные типы данных открывают программисту мир гибкого и модульного кода. Программа быстро компилируется, при этом есть сборщик мусора и поддерживается рефлексия.
Это быстрый, статически типизированный, компилируемый язык, при использовании которого создается впечатление использования динамически типизированного и интерпретируемого языка.
Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.
Настройка окружения
Для начала скачаем 64-битную версию Go c официального сайта. В зависимости от используемой операционной системы выполняем следующие действия.
UNIX / Linux / MacOS / FreeBSD
Добавляем папку /usr/local/go/bin в переменную окружения PATH :
Windows
Чтобы изменения вступили в силу, перезапустим все открытые окна эмуляторов терминала.
Проверяем корректность установки, создав и выполнив файл C:\Projects\Go\test.go :
Выполним этот код и получим следующий результат:
Синтаксис
Пакеты
Импорт
Импорт пакетов можно описать двумя способами.
Функции
Общая форма определения функции выглядит следующим образом:
Количество и тип входных аргументов может быть любым. Для примера опишем функцию add с двумя входными параметрами формата int :
Выполним этот код и получим следующий результат:
Переменные
Определение переменной в Go означает передачу компилятору информации о типе данных, а так же о месте и объёме хранилища, которое создаётся для этой переменной. Определять переменные одного типа можно по одному и списком. Общая форма такая:
С помощью оператора var определяем перечень переменных, причём тип данных указываем в конце выражения.
Объявление возможно как на уровне пакета, так и на уровне функции. Рассмотрим пример:
Выполним этот код и получим следующий результат:
Оператор цикла
Общая форма цикла выглядит так:
При инициализации кратко объявляются переменные, которые доступны только в пределах цикла.
Примечание В отличие от таких языков, как C, Java и JavaScript, перечисленные выражения цикла не выделяются скобками. В данном случае обязательны лишь фигурные скобки, обрамляющие тело цикла.
Рассмотрим пример программы:
Выполним этот код и получим следующий результат:
Условный оператор
Форма определения условного оператора в Go выглядит следующим образом:
Если выражение в поле условия истинно, код, размещённый между фигурными скобками, выполнится.
Условие описывается значением, переменной или выражением. Например:
Рассмотрим пример программы:
Выполним этот код и получим следующий результат:
Массивы
Язык программирования Go также поддерживает массивы, которые представляют из себя структуру данных фиксированного размера, состоящую из элементов одного типа. Массивы используются для хранения наборов данных, но полезно подразумевать под ними коллекцию переменных одного типа.
Чтобы объявить массив, необходимо указать тип и требуемое количество элементов следующим образом:
Если значения элементов известны, для определения массива допустимо использовать следующую конструкцию:
Длина массива не изменяется, потому что является частью типа данных. Это кажется ограниченным решением, но не волнуйтесь: в Go реализована комфортная работа с массивами.
Рассмотрим пример программы:
Выполним этот код и получим следующий результат:
Срезы
Срезы (Slices) в Go — абстракция над массивами. Хотя встроенных способов увеличить размер массива динамически или сделать вложенный массив в Go нет, срезы убирают это ограничение. Они предоставляют полезные функции и широко используются программистами.
Объявить срез можно как массив, но без указания размера или с помощью функции make :
Размер массива фиксирован, а у среза изменяемый. По сути, срез — более общий вид массива.
Рассмотрим пример программы:
Выполним этот код и получим следующий результат:
Структуры
Struct определяет тип данных, которому соответствует два и более элементов.
Type связывает заданное имя с описанием структуры.
Форма описания выглядит следующим образом:
Как только структура типа определена, он может использоваться при объявлении новых переменных:
Чтобы получить доступ к элементам структуры, используем оператор доступа к элементу. Рассмотрим на примере:
Выполним этот код и получим следующий результат:
Чем Golang хорош для начинающих?
Концепция языка Golang разработана на основе опыта решения повседневных задач и не преследует цель сделать прорыв в программировании. Кроме того, Go не реализует ряд функций, которые делают другие языки (C++, Java и Python) настолько мощными. Но есть три причины, чтобы задуматься об использовании этого языка.
Читабельность
Как только привык к синтаксису Go, прочесть чужой код — тривиальная задача.
У каждого человека собственный «правильный» способ делать вещи, поэтому Go навязывает свой стиль программирования. В результате вопросы вроде использования или неиспользования фигурных скобок отпадают, и остаётся только писать код по заданным правилам. Поэтому Golang подходит для начинающих.
Скорость
За короткий промежуток времени можно написать быструю программу.
Производительность работы пакета на Go, возможно, будет меньше, чем при использовании С, зато скорость компиляции для больших программ будет выше. Для большинства проектов — приемлемый компромисс, причём при необходимости достаточно просто переписать код на языке Go.
Меньше ошибок
Большинство ошибок возникают в непроверенном или сложном коде.
Go предоставляет удобные средства для тестирования. Кроме того, строгая типизация устраняет ошибки вроде случайного сравнения количества яблок с количеством груш, которые определяются ещё на этапе компиляции.
Заключение
Если хотите погрузиться глубже в изучение, посмотрите нашу подборку бесплатных книг по знакомству с языком программирования Go, а главное — начните создавать маленькие программы, чтобы на практике понять тонкости языка. Удачи!
Язык Go в 2020 году
Read this post in other languages:
English, Français, 한국어, 简体中文
Язык Go сейчас находится в верхушке списка самых популярных языков программирования. Мы знаем, что энергичное, веселое и гостеприимное сообщество пользователей Go любит этот язык за его скорость и эффективность, но нам хотелось больше деталей. Мы внимательно изучили все, что известно о Go, и получили набор фактов. Затем мы попросили Флорина Патана, нашего эксперта по Go и девелопер-адвоката в команде GoLand, чтобы он поделился своим мнением об этих фактах и помог понять, каковы позиции Go сегодня.
Где программируют на Go
1,1 миллиона Go-разработчиков
Около 1,1 миллиона профессиональных разработчиков используют Go в качестве основного языка программирования. Но если учесть профессиональных разработчиков, которые пишут в основном на других языках и немного — на Go, то эта цифра увеличится до 2,7 миллиона.
Если говорить о распространении языка в мире, то популярнее всего Go в Азии: около 570 тыс. проживающих здесь разработчиков используют Go в качестве основного языка программирования. На втором месте Европа с 243 тыс., среди которых около 35 тыс. программистов — из России.
Примерно такое распределение по регионам я и ожидал увидеть. На мой взгляд, Азия лидирует потому, что здесь очень много разработчиков, нанятых такими крупными компаниями, как Tencent, Alibaba и Huawei. В этих компаниях в принципе работает огромное количество разработчиков.
Где именно
Диаграмма показывает территориальное распределение разработчиков, использующих Go в качестве основного языка программирования, согласно исследованию экосистемы разработки 2020 (участники опроса могли указать до трех языков). Самая высокая концентрация обнаружена в Китае — 16% разработчиков.
Я не удивлен, что Китай занимает первое место. Но на втором месте я ожидал бы увидеть Россию, а США — хотя бы в первой пятерке.
Вероятно, Китай возглавляет список просто потому, что там проживает огромное количество разработчиков. Многим известным мне компаниям (например, PingCAP, Tencent, Huawei) нужно много разработчиков для поддержки, разработки внутренних инструментов, инфраструктуры и сервисов бэкенда, совмещенных с микросервисами. Похоже, это ключевой фактор.
Я знаю, что в России очень классные Go-сообщества, поэтому неудивительно, что здесь так популярен этот язык. Я не ожидал, что такие высокие позиции займут Япония и Украина. А что касается Германии и Индии, я ожидал, что их рейтинг будет чуть выше. Помню, когда я был в Берлине четыре или пять лет назад, Go использовался практически в каждом стартапе.
Что происходит в индустрии
Согласно исследованию экосистемы разработки 2020, Go входит в десятку основных языков, используемых профессиональными разработчиками. Его доля составляет около 7%.
Go продолжает расти. Люди, как правило, не выбирают Go в качестве своего первого языка программирования, а скорее переходят на него с других языков, таких как PHP и Ruby, но в основном с C++ и C# (насколько мне известно).
Преимуществом Go перед PHP является типобезопасность: Go — статически типизированный язык, а PHP — динамический. Это значит, что компилятор делает большую часть работы за вас и обеспечивает, чтобы написанный вами код скомпилировался и мог выполняться без проблем. Преимущество Go перед C++ — простота. В Go все довольно понятно.
Go отличается своей скоростью — это заметно и при написании кода, и при его выполнении. В целом, Go позволяет повысить производительность в 5-10 раз без каких-либо оптимизаций с вашей стороны, это важное преимущество для компаний. Кроме того, язык простой, его легко освоить. А еще он позволяет с легкостью заменять микросервисы в проектах.
Многие инструменты для IT-инфраструктуры, такие как Kubernetes, Docker, Vault (и это только самые крупные), используют Go. Хотя многие компании работают с Java, зачастую у них также есть команды, которые пишут на Go — особенно для поддержки и патчинга проектов. И это, пожалуй, еще одна из причин роста популярности Go. Чем больше технологии будут вовлечены в инфраструктуру и развертывание, тем больше будет расти Go. Думаю, что в ближайшие несколько лет все больше людей начнет использовать Go и мы дойдем до отметки 15-20%. В исследовании экосистемы разработки мы задавали вопрос: «Планируете ли вы освоить или перейти на другой язык в ближайшие 12 месяцев? Если да, то на какой?» 13% респондентов назвали Go.
Какое ПО разрабатывают на Go
Самой популярной областью применения Go являются веб-сервисы: согласно результатам исследования экосистемы разработки 2020, в 36% случаев Go используется именно для веб-сервисов.
С веб-сервисами главной задачей является создание быстрых API-серверов. Здесь необязателен фреймворк, поэтому серверы можно быстро поднять и запустить при помощи Go.
Я думаю, что эта диаграмма не слишком изменится в будущем. Но применение Go в веб-сервисах, на мой взгляд, станет еще популярнее: с него действительно очень легко начинать.
Та же история мне видится с утилитами: с Go довольно легко писать небольшие приложения-утилиты и быстрые приложения, позволяющие обрабатывать большие объемы данных, а также решать разовые задачи, требующие больших мощностей. Стоит посмотреть и на IT-инфраструктуру. Чем больше используется Docker и Kubernetes, тем больше будет использоваться и Go, просто потому что обе технологии написаны на Go. Go удобен для DevOps, поскольку он обеспечивает типобезопасность и высокую производительность. Взаимодействовать с облачной частью инфраструктуры довольно просто: Google, Amazon и Azure обеспечивают хорошие SDK. Думаю, что в ближайшие годы с приходом дженериков можно также ожидать подъема в категории библиотек и фреймворков.
Что касается системного ПО, полагаю, здесь будет наблюдаться спад и люди будут постепенно переходить на что-то вроде Rust. То же самое для баз данных. Скорей всего, в будущем этот сегмент сузится (примерно до 6%). Инструменты для программирования — я удивлен, что они заняли такую высокую позицию в списке, и мне было бы интересно узнать, что за инструменты создают при помощи Go.
Основные области применения Go
Согласно исследованию экосистемы разработки 2020, большая часть Go-программистов работает в секторе IT-услуг; далее следуют сферы финансов и финансовых технологий, облачных вычислений и платформ и др.
Что касается финансов и финансовых технологий, результат для меня вполне ожидаемый. Я знаю, что многие банки были запущены при помощи Go либо используют его в своей инфраструктуре. К примеру, британский банк Monzo был целиком создан при помощи Go. Облачные вычисления и платформы — тоже вполне закономерно, учитывая те типы приложений, которые пишутся на Go.
Я не ожидал увидеть здесь мобильную разработку. У Go нет внушительного опыта в области мобильной разработки. Я бы скорее ожидал, что люди будут использовать Go для разработки веб-сервисов или бэкенда для мобильных приложений, но не более того.
Есть несколько сфер, в которых я бы не рассчитывал на рост Go в ближайшее время. Например, все, что основано на машинном обучении, поскольку здесь по-прежнему силен Python. Есть попытки популяризировать машинное обучение на Go, но думаю, что результаты мы увидим только через несколько лет.
Инструменты для Go
Менеджеры зависимостей
Go Modules — самый популярный менеджер пакетов среди Go-разработчиков. Согласно исследованию экосистемы разработки 2020, его популярность выросла с 41% (в 2019 году) до 82% (в 2020 году).
Думаю, скоро мы перестанем задаваться этим вопросом, потому что Go Modules станет стандартной моделью, а GOPATH перестанет поддерживаться — у команды Go есть такие планы. Все остальное, пожалуй, просто устареет.
Go-роутеры
Gorilla / Mux и стандартная библиотека с 2018 года и до сих пор остаются самыми используемыми Go-роутерами согласно исследованиям экосистемы разработки, проведенным в 2020 и 2018 годах.
Стандартная библиотека, пожалуй, популярна потому, что ее, как правило, рекомендуют на Reddit, в Slack и других источниках. Я лично использую gorilla/mux, поскольку этот пакет дает чуть больше абстракции по сравнению со стандартной библиотекой, при этом не слишком жертвуя производительностью. Кроме того, gorilla/mux очень близок к стандартной библиотеке и с помощью него проще писать серверы. В целом, это именно то распределение, которое я ожидал увидеть.
Топ-5 веб-фреймворков
Использование Gin с 2018 года выросло практически вдвое, остальные фреймворки по большей части остались на прежних позициях (согласно исследованиям экосистемы разработки, проведенным в 2020 и 2018 годах).
Вероятно, Gin так популярен потому, что это один из самых быстрых фреймворков и у него хорошие рекомендации. Также это один из самых старых фреймворков, по нему много материалов. Многие уже давно его используют и рекомендуют.
Фреймворки для тестирования
Доля разработчиков, использующих встроенные инструменты тестирования, упала с 64% (в 2018 году) до 44% (в 2020 году). В то же время мы видим небольшой рост популярности остальных фреймворков для тестирования.
Встроенные инструменты тестирования остаются популярными, поскольку в стандартной библиотеке Go есть очень хорошая библиотека для тестирования.
Скорей всего, их использование снизилось потому, что в Go приходит все больше разработчиков из других языков (например, из PHP), и они предпочитают использовать привычные им инструменты.
Самые обсуждаемые инструменты Go и другие языки
Go много обсуждается IT-сообществом, в частности, на Stack Overflow. Мы взяли данные из раздела вопросов и ответов и посчитали, какие теги чаще всего встречаются вместе с «Go». Среди них оказалось 23 инструмента и 2 языка — «MySQL» и «PostgreSQL». Мы также посмотрели, как часто тег «Go» встречается с тегами других популярных языков. Вертикальная ось показывает количество появлений тегов, а горизонтальная — упоминания тегов с «Go».
На мой взгляд, с JSON действительно есть проблема. Переводить JSON в структуры данных Go и обратно — не так просто, вероятно, поэтому тема так популярна. Что касается struct, здесь дело в том, что разработчики, пришедшие из других языков, обычно с трудом вникают в эту тему (пожалуй, за исключением разработчиков на C/C++).
Я бы ожидал большого количества вопросов об Amazon Web Services, поскольку AWS очень популярны сами по себе. Теперь проще разрабатывать приложения на Go для Google App Engine (так было не всегда), поэтому об этом тоже много вопросов.
В целом, это очень здорово — быть частью Go-сообщества, оно очень гостеприимное. Новичков никогда не обижают, вопросы только приветствуются. Что касается тем для обсуждения, чаще всего в дискуссиях фигурируют дженерики и, пожалуй, различные улучшения языка, улучшения компилятора.
Особенно дженерики, поскольку они являются одной из самых ожидаемых новых возможностей языка и смогут помочь в решении множества задач.
Хотите попробовать GoLand в вашей команде? Получите расширенную пробную версию для неограниченного количества пользователей.
Ваша команда GoLand
The Drive to Develop