Go

Эта статья входит в число готовых статей
Эта статья прошла проверку экспертом
Материал из «Знание.Вики»
Go
Go Logo Blue.svg
Класс языка многопоточный, императивный, структурированный, объектно-ориентированный
Тип исполнения Компилируемый
Появился в 10 ноября 2009
Авторы Роберт Гризмер, Роб Пайк и Кен Томпсон
Разработчик Google
Тестовая версия 1.21.1 (6 сентября 2023)
Сайт go.dev
ОС DragonFly BSD, FreeBSD, Linux, macOS, NetBSD, OpenBSD, Plan 9, Solaris, Windows, iOS, Android, AIX и Illumos

Go (Golang) — компилируемый многопоточный язык программирования с открытым исходным кодом, анонсирован 10 ноября 2009 года. В основном его применяют в веб-сервисах и клиент-серверных приложениях. Авторы языка попытались совместить удобство разработки на Python со скоростью выполнения программ на С и C++, поэтому они сделали Go компилируемым. Хотя экосистема Go имеет свой собственный интерпретатор, он редко используется. На этом языке программирования можно писать программы от консольных приложений до сложных многопоточных программ. Язык программирования подходит для серверных приложений, в нем также есть библиотека для создания графических интерфейсов[1].

История

Роберт Грисмер — разработчик приложений в Google, в прошлом был привержен высокопроизводительной генерации кода на JavaScript, он занимался разработкой языка программирования Sawzall и современной реализацией Smalltalk-Strongtalk. Интерес Роберта к языкам программирования возник, когда он познакомился с языком Pascal, будучи аспирантом, он учился у Никлауса Вирта, создателя Pascal.

Когда Роберт окончил университет и посвятил себя реальному миру индустрии профессионального программирования, он решил разработать современный компилируемый язык, который сочетал бы в себе удобство разработки на Python со скорость выполнения программ на С и C++. Всё началось с установки следующих ориентиров[2]:

  • Простота, безопасность, читабельность первостепенны. Однако, простота языка не означает, что созданный на нем продукт обязан быть простым — иногда это просто неосуществимое условие.
  • Стремление к ортогональности в дизайне языка. Означало множество средств языка, которые бы не пересекались между собой и которые можно было бы проще комбинировать (combine) и составлять композиции (compose). Авторам хотелось, чтобы существовал только один путь написания конкретной конструкции.
  • Минимализм: существует всего один способ написать некоторый кусок кода (для этого правила сейчас есть несколько исключений — например, определения переменных)
  • Все дело в выразительности алгоритмов, а не в системе типов.
  • Отсутствие желания приспосабливать язык к какому-либо одному способу использования (к примеру, разработчики не хотели делать написание lock-free алгоритмов суперпростым, потому что эта область интересует лишь немногих экспертов, в то время как большинство программистов на Go не должны о них беспокоиться).
  • Коллективное осознание истории развития языков программирования.

Критики Go любят говорить, что в данном языке программирования нет ничего нового, но они упускают из виду тот факт, что это хорошее качество для языков программирования, так как цитируя Алана Кея, «Большинство идей проистекают из предыдущих идей», но более точно сказал Чарльз Хоар в 1973 году[3]:

Задача разработчиков языков программирования - консолидировать идеи, а не вводить новшестваХоар, Чарльз Энтони Ричард

Особенности

Язык программирования Go разработан для того, чтобы позволить разработчикам заниматься архитектурой приложений, не тратя время на утомительные вещи — например, создание документов или отслеживание устаревших грамматических структур. Язык программирования Go прост в использовании и хорош именно потому, что выполнение всех рутинных операций было перенесено с программиста на встроенные инструменты. Основные особенности языка программирования Go[4]:

  • Автоматическое управление памятью и сборщик мусора. Go — быстрый, как C/C++, но программировать на нём легче. Если в C/C++ приходится вручную управлять памятью, то компилятор Golang берёт эти заботы на себя.
  • Синтаксический сахар. Это синтаксические послабления, которые позволяют писать код быстрее. Например, формально некоторые операции в Go (if, for) должны заканчиваться точкой с запятой, но на деле компилятор сам способен расставить точки с запятыми в нужных местах.
  • Автоматическое форматирование программ. Golang сам расставляет отступы и выравнивает элементы по колонкам с помощью команды gofmt. Но важно использовать только табуляцию для отбивки строк — пробелы в начале строки gofmt не поймёт.
  • Автоматическое создание документации. Команда godoc найдёт все комментарии и сделает из них мануал к программе.
  • Отслеживание устаревших конструкций. Инструмент gofix сканирует код и отмечает синтаксические конструкции, которые считаются устаревшими по современным стандартам.
  • Инструменты тестирования. В Go включено множество инструментов тестирования. Например, typecheck проверяет соответствие типов в коде, golint даёт рекомендации на основе официальной документации — Effective Go и CodeReviewComments, gosimple упрощает сложные синтаксические конструкции, а gas находит уязвимости в коде.
  • Отслеживание состояния гонки. Для работы с многопоточными системами очень важно выполнять функции в правильном порядке, чтобы не перепутать данные, потому что состояние гонки — очень коварная ошибка. Она может возникать случайным образом, из-за этого локализовать её почти невозможно. Golang изначально спроектирован так, чтобы свести такие ошибки к минимуму. А если что-то и проскочит — есть дополнительные инструменты для проверки кода на состояние гонки. Чтобы включить детектор гонки, надо добавить флаг —race — на этапе компилирования, сборки, тестирования или установки пакета.
  • Профилирование. В языке программирования Go есть пакет pprof и консольная утилита go tool pprof. Профайлер pprof исследует, какие фрагменты кода выполняются слишком долго, где программа ест много памяти или чересчур нагружает процессор. Результат его работы — текстовый отчёт, профайл. Чтобы визуализировать профайл и построить из него схему, надо установить утилиту graphviz.

Эволюция Go

Со временем язык программирования Go сильно изменился — особенно изменились грамматика и семантика языка. Полезным решением являлась разработка стандартной библиотеки при создании языка. Утилиты Gofmt (для изменений в языке) и gofix (для изменений в API) предоставили разработчикам хорошие услуги, когда необходимо или возникает необходимость в тщательном рефакторинге.

Впоследствии в язык программирования были добавлены такие функции, как: необязательные точки с запятой, необязательные типы составного текста, необязательные границы для фрагментов. При добавлении этих языковых средств разработчикам неоднократно помогал инструментарий, который позволяет им вносить серьезные изменения без необходимости вручную переписывать большое количество программного кода[5].

Достоинства и недостатки

Достоинства и недостатки языка программирования Go (Golang)[6]:

Достоинства

  • Простота. Упрощенный синтаксис позволяет уменьшить время на освоение языка и увеличить скорость разработки. Именно это делает Go подходящим для больших корпораций языком. Когда разработкой занимаются сотни программистов одновременно — это имеет значение.
  • Быстрая компиляция.
  • Хорошая версионность и бесплатные обновления.
  • Большое количество библиотек. Многое можно реализовать через простую и понятную библиотеку Go, но также эффективно можно работать и с библиотеками на C.

Недостатки

  • Небольшое количество вакансий. Потребность даже в опытных в разработчиках на Go относительно невелика, а вариантов для новичков еще меньше.
  • Принудительное форматирование. Это спорная особенность, которую не всегда можно считать недостатком: каждый следующий разработчик точно знает, чего ждать от кода предшественника.
  • Упрощенный синтаксис иногда создает проблемы. Язык буквально навязывает его, не позволяя писать код по-своему. Если разработчику доступен только единственно верный вариант, сохранить уникальный стиль программирования у него не получится.

Почему язык Go пользуется популярностью

Язык программирования Go приобрел популярность из-за того, что этот молодой язык программирования позволяет создавать безопасные и масштабируемые приложения с минимальными усилиями. Go используется такими компаниями, как IBM, Intel, Ozon, Avito и ВКонтакте. Сохраняется вероятность того, что другие ит-гиганты постепенно перейдут на этот язык программирования, поскольку среди крупных команд разработчиков этот вариант кажется наиболее надежным.

Благодаря своей простоте, ясности и небольшому руководству Go также идеально подходит для обучения начинающих — его часто выбирают в качестве первого языка программирования. Go — это амбициозная попытка извлечь максимум пользы из таких языков, как C++, Java и Pascal. Это относительно простой язык, которым можно овладеть за короткое время, а это значит, что можно быстро развивать своих специалистов внутри компании. Нет никакой гарантии, что Go станет самым популярным в будущем, но несомненно, что принципы, использованные при его создании, применимы к любому новому языку[7].

Примечания

  1. Язык Go: что под капотом и зачем программисту учить его как второй. Скилбокс. Дата обращения: 7 октября 2023.
  2. История языка Golang. Ответы на вопросы про IT. Дата обращения: 7 октября 2023.
  3. Эволюция Go (неопр.). Хабр. Дата обращения: 8 октября 2023.
  4. Язык Go: особенности и сферы применения. ООО «ГикБреинс». Дата обращения: 8 октября 2023.
  5. История возникновения языка программирования Go. Perfect Quality Hosting. Дата обращения: 8 октября 2023.
  6. Где используется язык программирования Go?. Библиотека программиста. Дата обращения: 8 октября 2023.
  7. Язык программирования Go: почему все его любят и что на нем можно писать. Хекслет – лучший IT-колледж. Дата обращения: 8 октября 2023.

Ссылки