Go в 2015 году

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

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

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

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

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

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

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

d46a17ee745640cc804aa1a01f5a66d4.png

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

Код с картинки
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.

9e6c286842234999982e90426ac49606.png

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

С Новым Годом и счастливого кодинга!

© Habrahabr.ru