
В последнее время в инфопотоке 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)
c0t0d0
11.11.2019 16:43Есть мнение, что в отличие от Perl, golang отомрет тогда, когда Корпорации
БобраДобра явно захочет это сделать.
Не исключено, что он тогда станет настоящим языком. :)
eumorozov
11.11.2019 17:43-2Недавно столкнулся с необходимостью исправить небольшой баг в приложении на Golang. Бегло пролистал документацию и застрял на том, что поддержка Unicode в регекспах Go почти отстутствует. Например,
\b
не будет матчить границы слов на любом языке, отличном от английского.
«WTF?!» подумал я. На дворе 2019 год.
И вообще, мне непонятна ниша этого языка. Он императивный и процедурный. Таким образом, непонятно, какие у него реальные преимущества перед существующими ныне языками. Кроме того, что корпорация «добра» может вбухать миллиарды в его маркетинг.
CAJAX
11.11.2019 19:05Вы слишком бегло прочли документацию. Есть \b для ASCII и \B для остального, ну и \p{L} завезли, если те не подходят.
ilyapirogov
12.11.2019 20:30+1поддержка Unicode в регекспах Go почти отстутствует
Вам не кажется, что эта фраза немного громковато звучит, если учесть что вся проблема заключается в отличии нескольких выражений от PCRE?
Вот если бы
regexp.MustCompile(".{3}").FindString("абвгд")
возращал полтора битых символа, а не"абв"
тогда можно было бы говорить про отсутствие поддержки Unicode. А так я бы сказал, в Golang полная поддержка Unicode за исключением отсутствия выражения\B
(сопоставление с НЕ границей слова). Все остальное можно сделать без "эмулирования" выражений.eumorozov
12.11.2019 21:41Мне, после других языков, Go показался очень неудобным. Хотя я его толком и не изучал — мне надо было исправить ошибку в программе, которую использую. С грехом пополам исправил, и в процессе понял, что мне язык как-то не заходит. Удовольствия от процесса исправления не получил ни капли, наоборот. В том числе, потому что во всех других языках, к которым я привык,
\b
,\w
, и другие, работают с не-английскими словами, а в Go — нет. В привычных мне языкахToLower()
приведет все слова к нижнему регистру, а в Go — только английские. Подозреваю, что таких сюрпризов там еще много.
Ну и просто непонятно. У нас уже есть вагон и маленькая тележка императивных процедурных языков. Есть вагон и маленькая тележка ОО языков. Есть вагон и маленькая тележка функциональных языков. Есть маленькая тележка декларативных языков.
К чему еще один язык, который не добавляет почти ничего по сравнению с существующими?
mrobespierre
12.11.2019 03:54[offtopic]
… поддержка Unicode в регекспах Go почти отстутствует...
Автор Go — Роб Пайк по совместительству ещё и автор UTF-8, если что. Регэкспы кстати его давняя любовь, просто у него своё виденье и делает он по-своему.
www.cs.princeton.edu/courses/archive/spr09/cos333/beautiful.html
[/offtopic]eumorozov
12.11.2019 08:23Ох, нет времени на то, чтобы вникать в его философию прекрасного. Но на мой поверхностный взгляд, это выглядит как типичное англосаксонское пренебрежение к другим языкам. Ну не укладывается обычно у этих людей в голове, что кто-то может говорить и писать каждый день на других языках… Во всяком случае, я не раз с этим сталкивался, и каждый раз просто facepalm. Люди, которые знают только один язык, которым не приходится, как нам, учить минимум два, просто не способны понять множество проблем, связанных с i18n и l10n.
Английский явно занимает особое место в Golang. С ним все легко и просто. И только с ним.
Возможно, я ошибаюсь, так как глубоко не копал. Но мне не понравилось.
FSA
11.11.2019 17:55-2Язык был разработан в 2007 году и вышел в open-source в 2009 году.
Есть мнение, что история Go началась задолго до 2007 года. Вот оно:
astec
Так стоит ли его учить? И как?