Пользователь
12,0
рейтинг
25 декабря 2015 в 17:06

Разработка → Go в 2015 году

Go*
Уходящий 2015-й год выдался достаточно насыщенным для языка программирования Go и его сообщества. Всё больше людей открывают для себя мощь, скрывающуюся за простотой языка, сообщество растёт, развивается и играет всё более значимую роль в настоящем и будущем Go. Этот — шестой по счёту год существования языка — ознаменовался несколькими важными изменениями внутренностей языка, фантастическим улучшением сборщика мусора, первым шагом к стандартизации работы с зависимостями и многими другими событиями.
Давайте пройдемся вкратце по важным событиями 2015-го года в мире Go.



Начать, пожалуй, стоит с благодарностей аудитории Хабрахабра, которая своими бурными и не очень дискуссиями, создаёт особый интерес к языку Go. Количество плюсов и минусов, которые получают статьи и переводы про Go, явно показывает, как неравнодушны читатели к успеху языка. Конструктивную критику Go вы всегда можете послушать в русскоязычном подкасте Golangshow, а неконструктивная критика, которая зачастую возникает в комментариях и вызывает бурные дискуссии, заставляет всё больше и больше людей выяснить, кто же прав собственноручно.

Так или иначе, 2015-й год отметился тем, что об активном использовании Go скромно и мимоходом заявили такие компании, как SpaceX, Dropbox, Basecamp, MongoDB, ВКонтакте, Baidu и многие другие.


Основными нишами Go по прежнему остаются серверные системы и инфраструктуры — весь спектр, от маленьких микросервисов до экзабайтных распределённых систем хранения данных. REST/Web-бекенды, всевозможные прокси, базы данных, планировщики контейнеров и прочий серверный софт — это те сферы, для которых Go и создавался.

В этом году Go также показал, что на нём можно писать «опердень» (привет, Антон!)) — компания Mondo создаёт электронный банк на Go. Также важный прорыв в этом году был в развитии gomobile — в AppStore появилось первое приложение на Go, а для Android некоторые компании уже давно используют Go с выгодой для себя.

С десктопным софтом на Go в этом году не сложилось: UI-библиотеку gxui забросили, и новых серьезных альтернатив вроде как и нет. Полагаю, что это связано с медленным, но верным отмиранием ценности десктопного софта как класса.

Чтобы дать читателю большее понимание областей Go, приведу вот такую диаграмму, составленную по субьективному пониманию применимости и реального использования Go:



Ну а теперь предлагаю вкратце пройтись по основным событиям Go уходящего года. И, чтобы не гадать, какие же события или материалы были за этот год, попросим Go сделать это за нас и выбрать топ постов из сабреддита golang:

Код с картинки
package main

import (
	"fmt"
	"github.com/jzelinskie/geddit"
	"time"
)

func main() {
	session := geddit.NewSession("")

	opts := geddit.ListingOptions{
		Time: geddit.ThisYear,
	}

	posts, err := session.SubredditSubmissions("golang", geddit.TopSubmissions, opts)
	if err != nil {
		fmt.Println("Failed to get posts:", err)
	}

	for _, post := range posts {
		date := time.Unix(int64(post.DateCreated), 0)
		fmt.Printf("%s: %s\n", date.Format("02 Jan 2006"), post.Title)
	}
}


Результатом будет следующий список:
  • 19 Aug 2015: Go 1.5 is released
    Анонс релиза 1.5, в котором компилятор и рантайм Go был переписан с С на Go, что позволяет авторам более смело продвигаться вперёд в своих планах по улучшению сборщика мусора и рантайма Go в целом. Небольшим шагом назад стало замедление времени компиляции примерно в полтора раза. Теперь вместо 2 секунд нужно ждать 3, и это немного напрягает. Но новый сборщик мусора в Go 1.5 теперь имеет предсказуемые паузы, которые в 99% случаев не превышают 10мс.
  • 24 Feb 2015: The Go compilers are now written in Go
    Собственно, анонс вышеописанных изменений за пол-года до выхода Go 1.5
  • 05 Mar 2015: The Go Programming Language by Brian W. Kernighan, Alan Donovan
    Анонс книги Брайана Кернигана и Алана Донована, которая обещает стать почти такой же культовой, как книга Кернигана по C. Книга была издана в конце октября, и многие уже её получили и прочли!
  • 12 Jul 2015: Ivy — First Android App in 100% Golang on Google Play (written by the Go Team)
    Первое приложение на Go + GoMobile в AppStore.
  • 13 Aug 2015: Go 1.6 GC improvements plan
    Детальный документ с планируемыми изменениями сборщика мусора в Go 1.6. Поскольку язык не меняется, то основная работа и силы брошены на улучшение инструментария, компилятора, и рантайма. Этот документ для тех, кто интересуется внутренностями Go.
  • 08 Aug 2015: Dropbox's infrastructure is Go at a huge scale
    Скромный твит инженера Dropbox, признающегося в том, что в Dropbox не только кухня получила Мишленовскую звезду, но и что их распределенная система хранения данных, которая обрабатывает экзабайты данных и гоняет их по терабитным каналам, полностью написана на Go.
  • 30 Jun 2015: Go 1.5 will be able to build iOS apps.
    Ещё один анонс возможностей GoMobile в предверии релиза Go 1.5.
  • 14 Dec 2015: How to complain about Go
    А это моя статья на английском языке в стиле сатиры, высмеивающая разработчиков, критикующих Go за то, что тот не похож на их любимый язык. На Хабр перевод не делал, потому что сатиру тут вряд ли оценят.
  • 29 May 2015: rsc on why go does not have generics: it's technical, not political
    Спокойный и внятный ответ Расса Кокса — одного из авторов Go о том, что отсутствие дженериков в Go — это не политическое, а техническое решение. Авторы не видят красивого решения, которое даст пользователям возможность совать дженерики по поводу и без повода и не превратит язык в унылое Г.
  • 10 Nov 2015: Six years of Go — The Go Blog
    6-й день рождения Go!
  • 10 Jun 2015: [Parse.com] How We Moved Our API From Ruby to Go and Saved Our Sanity
    Блог компании Parse, описывающий их переезд с Ruby на Go.
  • 15 Dec 2015: Git Appraise, written by Google in Go, distributed code review
    Анонс проекта от Google — распределённая система code review, написанная на Go.
  • 14 Nov 2015: For Better or For Worse
    Отличная статья об оценке приоритетов подходов в языках. Перевод был тут на Хабре.
  • 08 Oct 2015: gologin: Login handlers for Google, Github, Facebook, Twitter, SMS, OAuth1/2, etc.
    Анонс пакета для работы с основными OAuth-провайдерами.
  • 15 Feb 2015: The State of Go
    Статья из официального блога Go о текущем состоянии дел в Go (на момент февраля 2015)
  • 08 Apr 2015: Stack Overflow developer survey: Go is in the top five most loved languages
    Go в топе самых обожаемых языков программирования. Бесполезный критерий, конечно, но всё-равно мимими.
  • 20 Aug 2015: Billions of request per day meet Go 1.5
    Статья о том, как компания, чей софт на Go обрабатывает миллиарды запросов в день, перешла на Go 1.5 и колоссально уменьшила паузы GC и общее время отклика. Перевод на хабре.


В этот топ много чего не попало, поэтому вкратце из того, что вспоминается: была написана реализация HTTP2, которая будет в стандартной библиотеке в Go 1.6 (да, сервера на Go 1.6 будут поддерживать HTTP2 из коробки), ребята из JetBrains провели (и продолжают проводить) колоссальную работу по развитию плагина для Go для IntelliJ IDEA, равно как и Fatih Arsian, автор плагина vim-go, который теперь отлично работает с NeoVim. Также появилась (не особо нужная) поддержка shared libraries.

Важным этапом можно назвать первый шаг в стандартизации решения для управления зависимостями в Go. Подход монорепозитория в Google не очень хорошо работает с «классической» схемой, где все зависимости нужно вендорить под проект, и в Go 1.5 появилась экспериментальная поддержка специального соглашения брать зависимости из папки vendor/, если таковая есть в проекте. В Go 1.6 это поведение не будет больше экспериментальным, но всё ещё опциональным, и в Go 1.7 планируется быть уже по-умолчанию. В тоже время, сообществу ещё предстоит прийти к консенсусу как лучше автоматизировать работу с зависимостями, так так есть несколько решений.

Говоря о прошедших событиях, нельзя обойти стороной конференции по Go. В этом году прошло 13 (!) конференций разного масштаба, и в следующем году планируется ещё больше. Из новых — это конференции в Китае, Индии и Дубаи! Основными же конференциями остаются международная GopherCon, которая традиционно проходит в Денвере, и европейская dotGo в Париже.

Также в этом году был запущен уже упомянутый выше русскоязычный еженедельный подкаст по Go — Golangshow. В подкасте ведущие не только обсуждают свежие новости из мира Go, но и приглашают интересных гостей. Уже записано 35 выпусков, так что смело подписывайтесь в iTunes или на сайте — https://golangshow.com.



Ну а в следующем, 2016-м году, нас ждёт Go 1.6 и Go 1.7, ещё больше интересных проектов и продуктов на Go, новых компаний и вакансий.

С Новым Годом и счастливого кодинга!
divan0 @divan0
карма
132,0
рейтинг 12,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

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

  • –1
    Прекрасный пост, спасибо. Особенно моё сердце греет консольный вим :). Сам факт того, что в Go присутствует всё необходимое для того, чтобы сделать vim-go — уже серьёзный повод задуматься о более близком знакомстве.
    • +3
      Да, в виме очень комфортно работать с Go. Там ещё очень на руку сыграла простая грамматика и пакеты для парсинга/работы с Go-кодом, благодаря которому инструменты статического анализа, линтеры и прочее достаточно легко создавались.
  • 0
    Давайте я ложку дёгтя добавлю, из-за этой ошибки пришлось откатиться на Go 1.4.xx — github.com/golang/go/issues/12233
    • 0
      Да, помню эту детективную историю.
    • 0
      Это пофикшено в 1.5.2, кстати.
    • 0
      А мы просто наложили патч за 10 минут и до сих пор на нём :)
      • +2
        Не. Это же надо выкачать исходники, наложить патч, собрать пакет, положить его в репозиторий, обновить сборочную машину… Нафик-нафик. Проще откатиться и всё. В производительность GC мы не упирались, а больше, вроде, 1.5 не из-за чего ставить.
  • –7
    divan0 Спасибо за цикл переводов и статей на хабре по этому замечательному языку.
    • –8
      Да не за что )
      • –15
        О, набежали специалисты по менеджменту больших команд и «правильному дизайну языков программирования» :-)

        • –6
          Для истории — как Go-хейтеры минусуют все подряд комментарии, ожидая пока запустится их IDE. :)
          • +3
            Я не жду, пока запустится моя IDE, она постоянно открыта.
            • –3
              А вы Go-хейтер? )
              • 0
                «Хейтер» — сильное слово, но язык (а, на самом деле, скорее хайп вокруг него) я не очень люблю, да.
  • –4
    Реално был хорошый год для GO рост и развитие на лицо
    • –10
      На лицо в извращённом порно испоражняются.
      • 0
        Никак не ожидал я на хабре увидеть классического захода гопника по типу «Жалко в пчёлки в жопке».
        • +7
          Причем здесь гопники? «Налицо» пишется слитно, на это был намек.
      • +1
        каждый думает в меру своей испорченности. Не у всех русский язык родной так что извините.
  • +10
    divan0 Ты вообще на роботу ходите? А то такое впечатление что только переводами Go статей и его пропагандой занимаетесь.
    • +8
      Ты вообще на роботу ходите?

      Я вообще на работу ходите, да. Я же на Go пишу, поэтому время остается и на себя, и на жизнь, и на статьи переводить.
      К слову, один среднестатический перевод у меня занимает около часа, не больше. Последнюю статью переводил спонтанно за завтраком в кафе перед работой, к примеру.
      • +1
        Сколько времени остается, кстати, зависит скорее не от языка, а от интересов и сложности задач.
    • –6
      Ужас какой, евангелист на Хабре!
    • –1
      Хлебовводов?
    • +1
      Какое вам дело до других людей? Человек занимается любимым делом. И это правильно.
      И да, я тоже люблю Go.
  • +1
    > Авторы не видят красивого решения, которое даст пользователям возможность совать дженерики по поводу и без повода и не превратит язык в унылое Г.
    > не политическое, а техническое решение

    Это не деление ли на ноль?
    • –9
      Это не деление ли на ноль?

      Нет.
  • –6
    Битвы (комментарии) пока выигрывает темная сторона силы (-) но война (пост) пока что за светлой стороной (+).
    • –6
      Беру огонь на себя

      Go — потрясающий язык!
    • –7
      Upd: ну вот, всю карму слили ))
      • –4
        И это ты называешь слили? -13 пунктов? Сиди обтекай, лошара. «Слили» это когда с сотни до нуля за два часа. А тебя немного помяли.
        • –1
          Ой-ой-ой, давайте не будем друг другу грубить. Приличный ресурс же.
          • +5
            Статьи про Го. Самые суровые статьи на Хабре.
            • +6
              Про Оберон мне всё равно больше нравились. Там всё было как-то бессмысленнее и беспощаднее.
  • +17
    Скромный твит инженера Dropbox, признающегося в том, что в Dropbox… их распределенная система хранения данных, которая обрабатывает экзабайты данных и гоняет их по терабитным каналам, полностью написана на Go.
    По признанию того же инженера, самую критичную по производительности часть решили переписать с Go на Rust.
    • 0
      Но пока не выкатили в прод еще, отчитаются после праздников о результатах.
    • +5
      По признанию того же инженера, самую критичную по производительности часть решили переписать с Go на Rust.

      И это здорово же! Это очень правильно, когда люди понимают компромиссы языков и технологий и выбирают(или, как минимум, стремятся) наиболее подходящие из них. К сожалению, в Dropbox-е эксперимент с Rust-ом пока ещё лишь эксперимент.
  • 0
    Прошу прощения за оффтоп: мне кажется или Rust теряет популярность?
    • 0
      Сложно оценить. После 1.0 вначале года был взлёт интереса, сейчас потише. Мне кажется, у Rust-а ещё пик hype-а только впереди.
      • 0
        Имеет ли смысл ее брать как основной ЯП для бэкенда? Многие конечно советуют Go, но как то не взлетело у меня, с Растом более менее
        • +1
          Зависит от того, что за проект. Раст сложнее как язык, причём на порядок, поэтому если нет сильной необходимости то не стоит, как мне кажется. Опять же, проще найти человека, который знает go чем того, кто знает Rust, а обучать Rust'у проще всего людей, хорошо знающих С++ (ИМХО), коих среди разработчиков бэкендов не много. Но выбор, как всегда, за вами.
        • +6
          Я — один из людей, поддерживающих развитие Rust, у меня есть код на Расте в продакшене, я много говорю и пишу про язык, слежу за развитием и т.д. Казалось бы, я должен вам кричать «да-да! Rust — лучший, берите». Но не рекомендую использовать Раст сегодня как основной язык на бекенде.

          HTTP-стек у Раста очень сырой, все может работать в тепличных условиях, но как дело дойдет до реальных пользователей, сидящих на странных устройствах в странных сетях за странными проксями и VPNами, вы можете столкнуться с проблемами, которые вам будет сложно решать. Такая же ситуация была у Node.js в 2011 году, и прошло какое-то время, прежде чем оно стало работать стабильно.

          Больших фреймворков уровня Rails/Django нет, а для тех, кто повторяет Sinatra/Express в Расте, еще нет достаточного количества middleware и плагинов, чтобы писать эффективно. ORM и Query Builders только появляются.

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

          А что нужно, так это взять за основу другой язык — например, Go — и писать для вашей системы небольшие модули на Rust. Модули могут со временем превратиться в полноценные сервисы, а там глядишь и подоспеет экосистема.

          У меня был опыт написания бекенда на Node с использованием нативных модулей, которые я написал на Rust. Код получился небольшой, приятный, с тестами и документацией, понравился заказчику и мне. То же самое люди делают с Go, Ruby и Python.
  • 0
    go хороший язык не идеальный но хороший. И в этом года он продвинулся хорошо
    • –4
      Большое спасибо за ценную аналитику. Держи нас в курсе!
  • +5
    А откуда на этой «розе направлений» применимости Go такой пик в анализе данных? Просто интересно, какие подвижки в этом направлении есть.
    • 0
      Подвижек в этом направлении нет. Сейчас он придет и расскажет тебе про то, что Go собирает телеметрию для SpaceX и Intel (а потом уйдет, так и не узнав, что сбор телеметрии != анализ данных) Но правды ради, Go правда используется в этих компаниях для сбора телеметрии. Интел даже был выкатывал библиотечку, snap называется. На самом деле data science сцена обошла Go стороной — все осталось на питоне и R, насколько я понимаю. Конечно раз в неделю повляется очередной пейсатель нейронных сетей и выкатывает свою «machine learning» библиотеку, чуть менее, чем полностью, состоящую из k-классификатора или однослойного перспетрона. На самом деле никто не занимается этим.

      И, по-сути, не должен. Go делался из расчета, что неопытные, только выпустившиеся гуглеры, смогут читать и поддерживать гугловскую сетевую инфраструктуру. Ну да, еще кто-то по какой-то причине делает на Go круд, но я этих людей не понимаю (для круда есть куда по-круче инструменты).
      • +1
        Дейта сайенс — да, питон и R. Или, пожалуй, всё-таки R и питон.

        Впрочем, конечно, от специфики зависит. У кого весь анализ данных заканчивается на from scikit import svn, тому и питон нормально, да. В моей практике штатных средств как-то не хватает, machine learning получается полноценной наукой, с изобретением и доказательством своих алгоритмов, и всё это делалось и делается на C++ и немножко Haskell.

        Но да, по последнему абзацу — у меня складывается похожее впечатление. Без упора на Google, разве что, а просто язык такой, с низким порогом, не терпящий многих способов сделать одно и то же и держащий в узде. Самое оно, чтобы проекты, в которые новичков вбрасывать нужно будет пачками, на нём писать. Что-либо серьёзно наукоёмкое противоречило бы исходной задаче.
    • –6
      Ну это моя субъективная оценка применимости Go. В принципе, есть все необходимые примитивы, есть все необходимые качества, чтобы стать популярным среди science-сообщества — мне кажется, тут вопрос чисто в инерционности и в том, что производительности питона хватает с головой, ну а Rlang теснить и некуда — он со своей задачей хорошо справляется.  Big data же — stream-processing, распределенщина — вот это все на Go тоже хорошо ложатся. Так что 5/10 я бы сильно «пиком» не называл, думаю эту нишу ещё Go будет занимать в ближайшие годы, по мере того как академическая среда будет для себя Go открывать.
      • 0
        А какие примитивы и качества там необходимы, по-вашему?
        • –3
          Работа с float с высокой точностью, big integers, простота работы с IO, знакомые концепции из C-подобных языков, легкая возможность задействовать все ядра процессора, и тому подобное. Близко с научной средой не знаком. А по-вашему какие?
          • +1
            Работа с float с высокой точностью, big integers

            Нужно, мягко скажем, сильно не везде, и есть в куче других языков.

            простота работы с IO

            Мне вдруг стало интересно, а что такое «сложное IO»?
            Ну и да, по моему опыту, это сильно не основная проблема.

            знакомые концепции из C-подобных языков

            Это какие?

            легкая возможность задействовать все ядра процессора

            Да, питон тут проигрывает. Впрочем, я и не фанат питона и защищать его не буду, есть куча других инструментов.

            А по-вашему какие?

            По-моему, самое важное для распространённости языка — его, гм, распространённость и наличие библиотек. Ниша клея для библиотечек на C уже занята питоном, равно как и ниша пресловутых дейта сайентистов, умеющих импортировать нужные модули из питона. Ниша всякой статистики и кучи библиотек уже давно занята R. В подавляющем большинстве статей, что мне приходилось читать, в качестве baseline-алгоритмов, если указываются конкретные реализации, то указываются всякие там weka или scikit.

            И вот приходит такой новоиспекающийся учёный, учащийся в магистратуре-аспирантуре. Читает чужие статьи перед тем, как заняться своим исследованием, как подобает любому ученому. Видит, что там один сплошной Python и R. Что он выберет?

            Ещё важна выразительность. Охота уметь построить хорошие примитивы и с ними оперировать. Haskell какой-нибудь здесь был бы на высоте, и именно поэтому лично я его и использую. Или C++, dlib больно хорош, а hmatrix периодически падал, ну и на C++ лично мне проще писать код с предсказуемой производительностью и предсказуемым ассемблерным представлением, на днях вон даже специально напилил наркоманию для аналитического дифференцирования в компил-тайме, чтобы компилятор за меня всё заинлайнил и соптимизировал, производительность оказалась равна ручному выписыванию производных в коде.
      • +4
        Все необходимые примитивы и качества и у сишки есть, только на ней особо не майнят. А все почему? Потому что не годится она. Go, например, это язык, cозданый для robust software, а в data science решает именно выразительность (дженерики, например, которых в Go нет) и лаконичность. По правде говоря, Go приносит профиты только на больших командах, когда менеджмент уже начинает играть существенную роль. Удобно загнать всех в рамки gofmt, оставить два способа реализации трех паттернов и чтобы сто обезьян делали тебе 100к строчек кода в неделю — с этим Go справляется на ура. Я не вижу как сюда может гипотетически data science вписаться, вообще не тот формат.
  • +5
    Я специально нанятый человек, хейтер гугла и все такое прочее.
    Пост о том, что удосужились свои сопли вытереть?
    • –5
      Пост о том, что удосужились свои сопли вытереть?

      Нет.
      • +5
        Но новый сборщик мусора в Go 1.5 теперь имеет предсказуемые паузы, которые в 99% случаев не превышают 10мс.
        Предсказуемо зависает? Где то я уже это видел.
        • –1
          Предсказуемо зависает? Где то я уже это видел.

          Вы радуетесь тому, что увидели знакомые слова? Или разбираетесь в теории сборки мусора и считаете, что это просто?
  • 0
    Добрый день. А не подскажете, где почитать про использование Go для Big Data\Data Science? На диаграмее вижу, что активно используется, но что-то не слышал про это раньше.
    UPD: Да, прочитал выше уже, что пока не особо используется.
    • 0
      Да, это больше было о потенциальной применимости. Вообще, недавно ребята из Google спрашивали в мейллисте, кто работает с Big Data, чтобы задать некоторые вопросы, лучше понять этот рынок (в контексте будущего Go): groups.google.com/forum/#!topic/golang-nuts/3RYCqPwTLIY

      Ну и разные проекты вроде такого на глаза регулярно попадаются: groups.google.com/forum/#!topic/golang-nuts/3RYCqPwTLIY

      Так что, думаю, эта ниша впереди.
  • –1
    Как уже выяснили в предыдущем топике, go не подходит для большей части embedded (кроме linux @ arm cortex-a/r). Также меня терзают смутные сомнения касательно big data и data science.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.