Expert.PRO: востребован ли Golang?

5 років назад

Expert.PRO — рубрика, в которой эксперт в своей профессиональной области делится мнением и советами. Сегодня на тему востребованности языка Golang на украинском рынке рассуждает Сергей Доний, инженер-программист в компании Infomir.

Golang (Go) — относительно молодой язык программирования, разработанный внутри компании Google в 2009 году. Его проектированием занимались Роберт Гризмер, Роб Пайк, а также Кен Томпсон, который внес вклад в создание языка C. Возможно, поэтому Go основан на C, но значительно доработанный. Он имеет лаконичный, простой синтаксис и большое количество синтаксических возможностей, что облегчает работу с ним. В Go есть также инструменты для форматирования кода, средства параллельного, функционального и объектно-ориентированного программирования (без поддержки наследования реализации).

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

Мы спросили Сергея, востребован ли Go на украинском рынке, а также какие плюсы и минусы в работе с данным языком.

«Golang в последнее время набирает популярность. Много серьезных продуктов уже написаны на go и успешно работают не один год. Например, Docker, Kubernetes, CloudFlare (активно использует для построения своих облачных сервисов: раз, два) — доказательство того, что даже в сложных системах он достаточно хорошо себя демонстрирует и, самое главное, подходит для выполнения не только локальных задач, но и в enterprise решениях ему тоже есть применение.

Из более мелких, но не менее востребованных на рынке:

  1. Traefik (load-balancer для docker web-сервисов)
  2. Prometheus
  3. Istio
  4. Elasticsearch Beats

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

Есть, правда, и свои особенности:

  1. Отсутствие ООП в классическом понимании. Для людей, которые не готовы отказаться от классов, данный язык не подходит в принципе. Нагромождение абстракции интерфейсами/структурами, попытки все-таки сделать базовый супертип, состоящий из множества включенных в себя дочерних псевдоклассов, приведет к тому, что код либо станет тяжелым, либо нечитаемым. GO разработчики отказались от поддержки классов в пользу простоты и читаемости кода.
  2. Наследование реализуется через композицию отношений между интерфейсами и структурами. Полиморфизм достигается путем использования анонимных полей внутри структуры. Go сохраняет возможность использования ООП, но существуют отличия и разнятся подходы от классических ООП-языков программирования. Отношение has-a достигается путем использования композиции, is-a отношение устанавливается через интерфейсы.
  3. Наличие goroutines (псевдопотоки go) для добавления параллелизма выполнения тогда, когда это нужно. Основные особенности:
    1. Для создания goroutine не требуется большое количество памяти. Это позволяет создавать большое количество goroutines и не бояться того, что сами goroutines вызовут ошибку OutOfMemoryError.
    2. При создании goroutine создается всего несколько процессов, внутри которых goroutines выполняются одна в рамках одного потока, блокировка выполнения приводит к запуску другой goroutine, выполнение происходит согласованно. В случае зависания goroutine она может быть выгружена из стека.
    3. Наличие прерываний. Производится в случае:
      1. Ожидается сетевой ввод;
      2. Выполнение приостанавливается на заданное время;
      3. Операции с каналами или работы с sync (собственно, в основном через каналы или sync происходит обмен общими ресурсами между несколькими goroutines);
    4. Возможность явного задания количества задействованных ядер.

В целом goroutine является абстракцией над стандартными системными потоками.

Основной стек задач, с которыми go справляется очень хорошо и демонстрирует высокую производительность:

  1. Кластерные задачи (балансеры, управление нодами, т.е. оркестрация)
  2. Консольные утилиты с сетевым взаимодействием, сокет соединениями, обработка очередей.
  3. Хайлоад бэкенды в целом я бы вряд ли рискнул переписывать полностью на go, особенно в местах, где орудуют DI контейнеры и добавляют много магии под капотом. Данные участки кода нужно будет преобразовать в линейный вид, и код будет работать линейно. Каждую из имплементаций следует выносить в отдельный пакет для разграничения логики. Но в качестве оптимизаций или увеличения производительности можно смотреть в сторону go для решения локальных проблем, где текущий инструмент не справляется.

Golang так же как и почти все современные языки имеет package-manager. Основным отличием от классических package-менеджеров является отсутствие централизованного хранилища. Не нужно отдельно публиковать пакет, а все что необходимо — просто опубликовать его на github. Версионирование командой не продумывалось изначально, поэтому версионирование у каждого пакетного менеджера свое.

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

Другие статьи рубрики Expert.PRO

Занимательные факты о названиях языков программирования

4241
0
Дивіться також
Netpeak Group та Мінцифри запустили курс навчання з користування штучним інтелектом. Там викладатимуть технології написання текстів, створення картинок та вирішення завдань за ...
OpenAI випускає нову модель під назвою o1, першу в запланованій серії моделей штучного інтелекту здатних, до міркування» та ланцюжкового ...
OpenAI анонсував випуск свого наступного великого продукту: модель генеративного штучного інтелекту під кодовою назвою Strawberry, офіційна назва OpenAI ...