Go дайджест. События, статьи, интересные проекты из мира Go (30 марта — 13 апреля 2017)

    imageВсем привет!

    Это третий выпуск дайджеста, посвящённого языку программирования Go (Golang), в этом году.

    В нём перечислены лучшие статьи за прошедшие пару недель, а также новости, события и проекты, заслуживающие внимание.


    Новости, События


    Вышел минорный релиз go1.8.1 [EN]
    Не пропустите Go meetup 14 апреля!
    Вышел релиз 0.20 генератора статических сайтов Hugo [EN]

    Статьи


    Что я изменил бы в Go
    3,5 года, 500к строк Go. Часть 1
    Простейший HTTP сервер на Golang и Elixir. Сравнение производительности
    HTTP/2 Server Push в Go 1.8
    Разработка приложений на Go: повторное использование логики
    Как не наступать на грабли в Go
    Облегчаем реверсинг Golang бинарников или зачем вообще писать скрипты в IDA
    Centrifugo – 3.5 миллиона оборотов в минуту
    Как мы ускорили наш DNS стек в 3 раза
    Семантический анализ веб-страниц
    Пишем модульную Go программу с плагинами
    Работаем с MySQL в Go
    Создание приложения Go в Google Cloud
    Загрузка настроек приложения из JSON в Golang
    Разработка Go(lang) API с echo и MySQL
    Отслеживание HTTP-перенаправлений в Golang
    Разработка Web-приложений и микросервисов на Go с Gin
    5 причин почему мы перешли с Python на Go [EN]
    Сравнение библиотек для построения текстовых интерфейсов (tui) на Go [EN]
    Обстоятельный гайд по обработке HTTP запросов в Go [EN]
    Гайд по тестированию обработчиков HTTP в Go [EN]
    Gosh: командная оболочка с плагинами на Go [EN]

    Подкасты


    — GolangShow: «Выпуск 095. С чистого листа»
    — Go time: «Game Development and Rebuilding Microservices» и «Distributed Messaging and Network Clients» [EN]

    Интересные проекты


    Ponzu: CMS на Go с автоматическим JSON API. Из коробки HTTPS, HTTP/2 Server Push и многое другое.
    Hermes: Генератор HTML и текстовых e-mail на Go
    Безопасная разработка на Go
    «30 дней с Go»
    Клиент для тестирование скорости + сервер для создания своего сервиса по тестированию
    Qt биндинги на Go с поддержкой Windows / macOS / Linux / Android / iOS / Sailfish OS / Raspberry Pi / AsteroidOS

    Видео


    Видеолекция от Pusher с обзором работы сборщика мусора в Go [EN]
    Golang CodeFest Party
    22 видеозаписи с GopherCon India 2017 [EN]
    Работа с пакетом Context в Go [EN]

    Спасибо за внимание!
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

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

    Комментарии 19

      +1
      Посмотрел очередной дайджест и хочу поднять вопрос с гоферам: есть ли такие проекты, в которых хороший Golang код? Не perl-go, java-go, php-go и так далее.
      Советовали посмотреть kubernates, но и там все то де: интерфейсы ради интерфейсов на том же уровне, что и реализация…
      Вполне серьезно спрашиваю: хочу хотя бы небольшую подборку хорошего гошногг кода сделать. Подчеркиваю, не хороших проектов, не удобных пакетов, а именно хорошего golang кода.
        0
        Я смотрю хороший код в стандартной библиотеке. Рекомендую начать оттуда. К примеру, вот код из net/http https://golang.org/src/net/http/
          +2
          Читаю стандартную библиотеку пару лет и она не хороша везде. Очень чувствуется, что ее писали разные люди и часто еще не имеющие гошного опыта, просто в силу того, что его они же только что создали.
          Так что «с одной стороны да, но вцелом нет»: однобуквенные переменные, ошибки через панику, даже есть велосипедные реализации try catch, методы по сотне строк.
          Из хорошего: мне очень нравится элегантное решение с сортировкой. Универсальное, не зависящее от типов и не требующее обобщенных типов, интерфейс из одного метода — отличное решение.
            +2
            Конкретно к net: много ненужного выделения памяти, что мы все знаем и почему стали появляться проекты вроде fasthttp; создание ошибок на месте их появления, ошибки не имеют ни типов, ни своих интерфейсов, ни кодов ошибок. У Дейва хорошо разобрано про ошибки — подход стандартной библиотеки вынуждает меня или бездумно прокидывать ошибки выше, или также бездумно заменять своими, теряя контекст, или подавлять, или проверять ошибки по сообщениям в них, что совсем печально.
              0
              А вот это не смотрели? Говорят, что вполне прилично они пишут:

              https://github.com/hashicorp/vault
              https://github.com/hashicorp/consul
                +1
                Ццблагодарю, посмотрю внимательнее, но пока есть сомнения:
                https://github.com/hashicorp/vault/blob/master/vault/acl.go — метод за 120 строк с 4х кратной вложенностью if, использование goto без критичной необходимости.
                  –1
                  > использование goto без критичной необходимости

                  На мой взгляд, вот в данном конкретном случае тут ничего страшного в использовании goto нет, наоборот упрощает код.

                  > с 4х кратной вложенностью if

                  Тут согласен, но, опять же, ничего особо страшного в этом не вижу. После ада с 8-10 if'ами, которое мне доводилось видеть, читается довольно легко.
                    +1
                    Непонятна необходимость делать громадный метод со сложной логикой, которую после побеждаем при помощи goto. Хотя можно было сразу делать простые методы. Сейчас же он делаем Много чего в себе, ответственность у него большая, как следствие тесты не маленькие, а такие же большие по сути.
                      0
                      Если посмотреть с этой стороны — то да, один из анти-паттернов, лучше разбивать на несколько более простых. Возможно так было сделано ради оптимизации по скорости выполнения.
                        +1
                        тоже странный аргумент: если ребята дошли до той черты, когда дополнительный вызов метода значим, то зачем они взяли язык с GC? Ну или, почему тогда на этот «супер-критичный» по производительности метод не бенчмарков?
                        В общем, не думаю, что такова история. Больше похоже на фигак-фигак.
                          0
                          С GC же вроде с недавних пор все хорошо? В смысле, он умно запускается при паузах, и если не успевает за какое-то время — то переносится на следующий раз. Вроде читал о подобном некоторое время назад.
                          Насчет «фигак-фигак» — есть сомнения, ребята довольно серьезные, и они свой софт еще в виде enterprise editions продают.
                            0
                            Не совсем с GC. Если было бы так, то при любом размере кучи не было бы длительных остановок.
                            Верным утверждением было бы, что 90-й процентиль stop-the-world не превосходит миллисекунды. В подтверждение моих слов,например — это на 1.6, где вроде как все паузы должны были быть менее 10ms, но на большой map паузы достигают намного больших значений.

                            Про «фигак-фигак» — не вижу взаимосвязи между «серьезные ребята» и «хороший код».
                              0
                              Действительно, судя по всему, ждем 1.9.
                                +1
                                Станет получше, более конкурентный GC и не всегда съедающий по целому кванту времени, да. Но если есть GC и активно растущая куса, то рано или поздно отложенную на предыдущих шагах GC работу придется сделать и отложенная длительная пауза GC станет только в разы больше.
                                Фактически сейчас улучшается самый ожидаемый случай с GC, и ухудшается самый печальный.
            0
            А чем https://golang.org/doc/effective_go.html не устроил?
              0
              А в каком месте это «проект»? Это набор объяснений устройства go, советов и небольших примеров, не более того.
                –1
                Так вы ж просили «Подчеркиваю, не хороших проектов, не удобных пакетов, а именно хорошего golang кода», в эффективном Го именно примеры хорошего кода: о)
                  0
                  Ерунда, далее без комментариев.
                    –1
                    Тю, странно, в стартпосте вы просите примеры хорошего кода, но «не хороших проектов», потом удивляетесь, «А в каком месте это «проект»?».
                    Вы уж как-нить определитесь, вам нужны примеры хорошего кода, или вам нужен проект?: о)

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

          Самое читаемое