Expert.PRO: востребован ли Golang?
8 месяцев назад
Статьи
1743
0

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 практически всегда выглядит чистым, прозрачным и понятным. Его не стоит рассматривать как единый инструмент, с помощью которого можно будет делать все. Его стоит рассматривать как дополнительный инструмент для того сегмента задач, для которого он подходит идеально».

Открытые вакансии Golang

Оставить комментарий

Ваш комментарий будет отображаться только после прохождения модерации...
Комментариев нет
Лучшие материалы
Рубрику English.PRO ведут наши партнеры — Курсы английского языка для IT-специалистов English For IT.  Кому нужен English For IT? English For IT нужен ...
Ходят споры, где лучше работать - в аутсорсинговой или продуктовой компании. Специалистов интересует результаты такого выбора: зарплата, профессиональное развитие, перспективы. ...
Начало новой недели, еще и осень. В работе всякое случается: усталость, стресс, апатия, эмоциональное выгорание. Предлагаем вам несколько экспериментов чтобы ...