В преддверии запуска нового потока по курсу «Разработчик Golang» делимся небольшой авторской статьей с нашими читателями.




В последнее время в инфопотоке IT высказывается мнение, что Golang — умирающий язык, и совсем скоро пополнит обширное кладбище технологий Google. Однако, никто не знает, что будет в будущем, а отмирание любого языка программирования — процесс иногда невероятно длительный (ведь если честно, Perl уже давно пора отмереть хотя бы от бэкенда, но нет). Однако давайте по порядку: почему у детища компании Добра нет популярности, свойственной PHP или Python?

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



История возникновения


Язык был разработан в 2007 году и вышел в open-source в 2009 году. Изначально он был разработан что бы заменить другие компилируемые языки — С, С++ и Java. Последние языки не были специально разработаны как backend — языки, и компания Google попыталась заменить их своим языком, который был создан специально для этого. Если вкратце, то это все. Сейчас язык развивается и дополняется, но не так быстро, как хотелось — к примеру, кроссплатфоренное родное GUI так и не было разработано.

Почему он хорош


Golang обладает скоростью компилируемого языка, но ощущается как интерпретируемый язык. Это означает, что при разработке у вас есть быстрая скорость компиляции (Swift, как дела?) и быстрая система обратной связи, позволяющая понять, что в вашем коде пошло не так.

Документация Golang достаточно разнообразна и часто обновляется. Несмотря на все заявления хейтеров языка, пакеты можно найти практически под любую проблему. Например, можно попробовать написать небольшую 2D игру. Почему бы и нет? Она кстати получится кроссплатформенная).

Лаконичность языка


Go весьма лаконичен. Маловероятно, что ваша программа примет такой вид:



Ладно, ладно. Такое в реальной разработке непросто наверное встретить, но все возможно).

Если вы ещё никогда не видели код на GO, то посмотрите пример небольшого сервера:

package main

//возьмем два пакета. Один выдает наши сообщения, другой работает с http
import (
    "fmt"
    "net/http"
)

//если вы писали любой простой сервер, например под Node.js
// то тут для вас ничего нового не будет

func hello(w http.ResponseWriter, req *http.Request) {
    fmt.Fprintf(w, "<h1> Привет я Go </h1> <br /> <h2>Я хочу что бы ты почувствовал мою скорость </h2>\n")
}

func headers(w http.ResponseWriter, req *http.Request) {
    for name, headers := range req.Header {
        for _, h := range headers {
            fmt.Fprintf(w, "%v: %v\n", name, h)
        }
    }
}

func main() {
    http.HandleFunc("/hello", hello)
    http.HandleFunc("/headers", headers)

    http.ListenAndServe(":8090", nil)
}




Чем он может быть нелюбим


Вакансий по Go к сожалению, не так много, как по PHP или Python. Кроме того, проблема в том, что по Gо словно нет вакансий для junior — разработчика — все словно хотят что бы им сразу как минимум миддла подавали. Однако вакансии junior-разработчика постепенно начинают появляться, хоть и не в таком массовом порядке (22 вакансии стажера разработчика в Москве на ноябрь 2019 года), компании готовы выращивать специалистов внутри. Кроме того, в Go — разработчике заинтересованы те компании, которые владеют большими высоконагруженными сервисами — Yandex, Сбербанк, Mail.ru — иными словами, большие компании, а не «шарашкины конторы» (не будем показывать пальцем, но я надеюсь, вы поняли, о чем я).

Насильное форматирование и прочее


На нескольких конференциях по Go, на которых мне довелось бывать, множество разработчиков высказывали недовольство данным моментом: в Golang нет каких-то проблем со style-guide: изначально он определен прямо в компиляторе языка. Этот момент можно рассматривать по разному: c одной стороны, вас ограничивают в творческой свободе ставить отступы и пробелы как вам нравится, и оставлять неиспользованные переменные где вы только захотите. С другой стороны, когда вы зайдете в код другого разработчика, вы знаете, какой код-стайл ожидать, и без сюрпризов. Примерно к такому же роду проблем я бы отнес, то, о чем все просят, но до сих пор нет в Golang: дженерики, GUI, локальное хранилище потока и т.д.

Кому стоит начать учить Go, и почему


В первую очередь на Golang смотрят Ruby on Rails разработчики. Вакансий становятся меньше, и если менять свой основной язык, то тогда уж на что-то перспективное. Кроме того, никто не заставляет уходить с «рельсов» прямо сейчас, ведь можно мигрировать постепенно, чем сейчас и занимаются множество компаний.

Python разработчики. Не потому что на Python сейчас мало вакансий или он неприятен — вовсе нет. Но Golang при создании испытал влияние Python, поэтому если вы всегда хотели начать писать на компилируемом языке, но как-то не получалось — Golang вы выучите быстро.

C++ разработчики. Люди, которые писали на плюсах бэк, осваивают Golang в среднем за 3 — 4 недели (опять же, все со слов докладчиков на Go в продакшене). Здесь вы получаете современный язык программирования, с учетом ошибок предыдущих, без радости стрельбы в ногу.

PHP — разработчик. В конце-концов, почему бы не быть открытым новому? Если вам надоело мутное болото, в которое иногда скатываются сервисы на PHP, посмотрите в сторону Go.

По традиции, несколько полезных ссылок:


Тур по Go — интерактивное введение в программирование на Go
Небольшое введение на русском
Небольшой playground чтобы попробовать что-нить на практике

Комментарии (28)


  1. astec
    11.11.2019 16:37

    Так стоит ли его учить? И как?


  1. Yeah
    11.11.2019 16:41

    И где раскрытие темы "как его учить"?


  1. c0t0d0
    11.11.2019 16:43

    Есть мнение, что в отличие от Perl, golang отомрет тогда, когда Корпорации Бобра Добра явно захочет это сделать.
    Не исключено, что он тогда станет настоящим языком. :)


  1. eumorozov
    11.11.2019 17:43
    -2

    Недавно столкнулся с необходимостью исправить небольшой баг в приложении на Golang. Бегло пролистал документацию и застрял на том, что поддержка Unicode в регекспах Go почти отстутствует. Например, \b не будет матчить границы слов на любом языке, отличном от английского.


    «WTF?!» подумал я. На дворе 2019 год.


    И вообще, мне непонятна ниша этого языка. Он императивный и процедурный. Таким образом, непонятно, какие у него реальные преимущества перед существующими ныне языками. Кроме того, что корпорация «добра» может вбухать миллиарды в его маркетинг.


    1. CAJAX
      11.11.2019 19:05

      Вы слишком бегло прочли документацию. Есть \b для ASCII и \B для остального, ну и \p{L} завезли, если те не подходят.


      1. eumorozov
        11.11.2019 19:16

        Вы поспешили поставить минус. \B — это совсем другая вещь в регекспах.
        Я знаю, что можно сэмулировать \b вручную (наверное), но это не то же самое, что иметь полную поддержку Unicode в регекспах, и спокойно использовать \w или \b.


        1. CAJAX
          11.11.2019 19:37

          Я минус вам не ставил.


    1. ilyapirogov
      12.11.2019 20:30
      +1

      поддержка Unicode в регекспах Go почти отстутствует

      Вам не кажется, что эта фраза немного громковато звучит, если учесть что вся проблема заключается в отличии нескольких выражений от PCRE?


      Вот если бы regexp.MustCompile(".{3}").FindString("абвгд") возращал полтора битых символа, а не "абв" тогда можно было бы говорить про отсутствие поддержки Unicode. А так я бы сказал, в Golang полная поддержка Unicode за исключением отсутствия выражения \B (сопоставление с НЕ границей слова). Все остальное можно сделать без "эмулирования" выражений.


      1. eumorozov
        12.11.2019 21:41

        Мне, после других языков, Go показался очень неудобным. Хотя я его толком и не изучал — мне надо было исправить ошибку в программе, которую использую. С грехом пополам исправил, и в процессе понял, что мне язык как-то не заходит. Удовольствия от процесса исправления не получил ни капли, наоборот. В том числе, потому что во всех других языках, к которым я привык, \b, \w, и другие, работают с не-английскими словами, а в Go — нет. В привычных мне языках ToLower() приведет все слова к нижнему регистру, а в Go — только английские. Подозреваю, что таких сюрпризов там еще много.


        Ну и просто непонятно. У нас уже есть вагон и маленькая тележка императивных процедурных языков. Есть вагон и маленькая тележка ОО языков. Есть вагон и маленькая тележка функциональных языков. Есть маленькая тележка декларативных языков.


        К чему еще один язык, который не добавляет почти ничего по сравнению с существующими?


    1. mrobespierre
      12.11.2019 03:54

      [offtopic]

      … поддержка Unicode в регекспах Go почти отстутствует...

      Автор Go — Роб Пайк по совместительству ещё и автор UTF-8, если что. Регэкспы кстати его давняя любовь, просто у него своё виденье и делает он по-своему.
      www.cs.princeton.edu/courses/archive/spr09/cos333/beautiful.html
      [/offtopic]


      1. eumorozov
        12.11.2019 08:23

        Ох, нет времени на то, чтобы вникать в его философию прекрасного. Но на мой поверхностный взгляд, это выглядит как типичное англосаксонское пренебрежение к другим языкам. Ну не укладывается обычно у этих людей в голове, что кто-то может говорить и писать каждый день на других языках… Во всяком случае, я не раз с этим сталкивался, и каждый раз просто facepalm. Люди, которые знают только один язык, которым не приходится, как нам, учить минимум два, просто не способны понять множество проблем, связанных с i18n и l10n.


        Английский явно занимает особое место в Golang. С ним все легко и просто. И только с ним.


        Возможно, я ошибаюсь, так как глубоко не копал. Но мне не понравилось.


  1. FSA
    11.11.2019 17:55
    -2

    Язык был разработан в 2007 году и вышел в open-source в 2009 году.

    Есть мнение, что история Go началась задолго до 2007 года. Вот оно:



    1. Vlad800
      12.11.2019 03:38

      А нет ли ссылки на доклад «Дженерики в Go» Ильи Глухова с этой же конференции?


  1. Desprit
    11.11.2019 18:17

    Забавно у вас заголовок меняется. Что дальше, «почему не стоит учить го»? :)


  1. ghrb
    11.11.2019 19:03
    -1

    Но у вас же в статье вопрос из заголовка даже не обсуждается.


  1. thauquoo
    11.11.2019 19:05

    Go повторяет судьбу D. Где сейчас D?


    1. bfDeveloper
      11.11.2019 19:42

      D не хайпил никогда. За ним никогда не было больших денег. И он, в отличие от го, стабильно растёт. Да медленно, да мало людей, но всё больше и больше. Го скорее повторит судьбу Ruby, что ему предрекали ещё в самом начале. То есть он точно так же отшумел, не завхватил мир, но и не умер, развивается и и используется, пусть и не так часто, как на волне популярности.
      А вот будущее D мне совершенно неясно. Он и не умирает, и не стреляет. Python когда-то тоже просуществовал в таком состоянии долго, но D уже дольше маринуется. Хочется верить, что его развитие принесёт ему славу, но нужна корпорация с деньгами.


      1. Deissh
        12.11.2019 21:09
        +1

        Вы знаете почему умер руби? Потому что он был медленным куском… который развился наверное только из за RoR. Го вряд-ли умрет такой же смертью, если вообще умрет.


    1. Siemargl
      11.11.2019 22:57

      Go повторяет судьбу D. Где сейчас D?
      В Тиобе 20 =)

      Но это слабосравнимые языки, в т.ч по областям применимости.


    1. FSA
      12.11.2019 03:52

      В наборе gcc 9.


  1. Biga
    12.11.2019 21:09

    Если Go — умирающий язык, то следовало бы рассказать, какие есть более успешные и перспективные альтернативы.


    1. gfarniev
      12.11.2019 07:58
      +1

      Rust?


  1. pawlo16
    12.11.2019 21:30
    -1

    «В последнее время в инфопотоке IT высказывается мнение, что Golang — умирающий язык» — в этой фразе мои тапочки оборжались, поэтому пост до конца не осилил. Хотелось бы спросить что за «авторитет» высказал сие мнение, на чём оно основано и на каком основании автор счёл уместным его обсуждать? Сколько выкурил сей уникум что ему приглючился умирающий k8s, докер, графана, influxdb, умирающий гугл, умирающий интернет


  1. mr_tron
    12.11.2019 00:15
    -2

    Чё там учить? Дольше будете читать статьи «стоит ли учить го».


  1. rudinandrey
    12.11.2019 01:07
    -1

    как PHP так сразу мутное болото, нормальный это язык, нормальный! прекрасно и быстро работает как в консоли для какой то автоматизации, так и на Web-сервере.


  1. Vlad800
    12.11.2019 02:41

    Надоели скобочки в Lisp? Переходи на Go!
    Надоело следить за памятью в C? Переходи на Go!
    Не можешь запомнить весь мануал C++? Переходи на Go!
    Не хочешь ворочать легаси на Java? Переходи на Go!
    Тяжело заходит Scala? Переходи на Go!
    Вывод: Go — лучший язык программирования!
    </сарказм>


  1. SerafimArts
    12.11.2019 06:52

    Пара копеек с моим "имхо", которое, естественно, не претендует на истинность суждений. И которое можно, естественно оспорить.


    Пропущу "воду" про преимущества, которые ничем особо не отличаются от преимуществ языка Х (подставить любой язык) и сразу перейду к выводам.


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

    Например на Crystal, который будет на порядки ближе рубистам, нежели потомок алефа и plan 9 от гугла.


    Но Golang при создании испытал влияние Python

    1) На Go оказал влияние в большей степени язык Alef и в меньшей Limbo, а не Python. Каким боком его туда приписали — я могу лишь догадываться.


    Если вам надоело мутное болото, в которое иногда скатываются сервисы на PHP,

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


  1. loltrol
    12.11.2019 09:15

    На счёт лаконичности улыбнуло, автор сравнил чёрное с белым. А давайте реализуем похожий функционал как в примере кода — и у нас будет кусок на go + дополнительный файл с template. Лаконичностью не пахнет, потому что, внезапно, не может что то сложное быть лаконичным. Не возможно описать структуру автомобиля в 2 листа А4, там тома с текстами и схемами надо.


    Все эти доводы о лаконичности, чистоте читаемости go спокойно разбиваются о ненадобность(и не возможности в виду различных причин) писать крутой код, и сам язык не может это зафорсить. Просто полистайте код docker и попробуйте разобраться — лапша знатная.