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]

Спасибо за внимание!
Поделиться с друзьями
-->

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


  1. JekaMas
    13.04.2017 10:28
    +1

    Посмотрел очередной дайджест и хочу поднять вопрос с гоферам: есть ли такие проекты, в которых хороший Golang код? Не perl-go, java-go, php-go и так далее.
    Советовали посмотреть kubernates, но и там все то де: интерфейсы ради интерфейсов на том же уровне, что и реализация…
    Вполне серьезно спрашиваю: хочу хотя бы небольшую подборку хорошего гошногг кода сделать. Подчеркиваю, не хороших проектов, не удобных пакетов, а именно хорошего golang кода.


    1. fokusov
      13.04.2017 10:31

      Я смотрю хороший код в стандартной библиотеке. Рекомендую начать оттуда. К примеру, вот код из net/http https://golang.org/src/net/http/


      1. JekaMas
        13.04.2017 10:49
        +2

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


      1. JekaMas
        13.04.2017 10:55
        +2

        Конкретно к net: много ненужного выделения памяти, что мы все знаем и почему стали появляться проекты вроде fasthttp; создание ошибок на месте их появления, ошибки не имеют ни типов, ни своих интерфейсов, ни кодов ошибок. У Дейва хорошо разобрано про ошибки — подход стандартной библиотеки вынуждает меня или бездумно прокидывать ошибки выше, или также бездумно заменять своими, теряя контекст, или подавлять, или проверять ошибки по сообщениям в них, что совсем печально.


        1. isden
          13.04.2017 12:11

          А вот это не смотрели? Говорят, что вполне прилично они пишут:

          https://github.com/hashicorp/vault
          https://github.com/hashicorp/consul


          1. JekaMas
            13.04.2017 12:24
            +1

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


            1. isden
              13.04.2017 12:39
              -1

              > использование goto без критичной необходимости

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

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

              Тут согласен, но, опять же, ничего особо страшного в этом не вижу. После ада с 8-10 if'ами, которое мне доводилось видеть, читается довольно легко.


              1. JekaMas
                13.04.2017 13:13
                +1

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


                1. isden
                  13.04.2017 13:34

                  Если посмотреть с этой стороны — то да, один из анти-паттернов, лучше разбивать на несколько более простых. Возможно так было сделано ради оптимизации по скорости выполнения.


                  1. JekaMas
                    13.04.2017 14:40
                    +1

                    тоже странный аргумент: если ребята дошли до той черты, когда дополнительный вызов метода значим, то зачем они взяли язык с GC? Ну или, почему тогда на этот «супер-критичный» по производительности метод не бенчмарков?
                    В общем, не думаю, что такова история. Больше похоже на фигак-фигак.


                    1. isden
                      13.04.2017 14:54

                      С GC же вроде с недавних пор все хорошо? В смысле, он умно запускается при паузах, и если не успевает за какое-то время — то переносится на следующий раз. Вроде читал о подобном некоторое время назад.
                      Насчет «фигак-фигак» — есть сомнения, ребята довольно серьезные, и они свой софт еще в виде enterprise editions продают.


                      1. JekaMas
                        13.04.2017 15:03

                        Не совсем с GC. Если было бы так, то при любом размере кучи не было бы длительных остановок.
                        Верным утверждением было бы, что 90-й процентиль stop-the-world не превосходит миллисекунды. В подтверждение моих слов,например — это на 1.6, где вроде как все паузы должны были быть менее 10ms, но на большой map паузы достигают намного больших значений.

                        Про «фигак-фигак» — не вижу взаимосвязи между «серьезные ребята» и «хороший код».


                        1. isden
                          13.04.2017 15:09

                          Действительно, судя по всему, ждем 1.9.


                          1. JekaMas
                            13.04.2017 15:22
                            +1

                            Станет получше, более конкурентный GC и не всегда съедающий по целому кванту времени, да. Но если есть GC и активно растущая куса, то рано или поздно отложенную на предыдущих шагах GC работу придется сделать и отложенная длительная пауза GC станет только в разы больше.
                            Фактически сейчас улучшается самый ожидаемый случай с GC, и ухудшается самый печальный.


    1. Prolych
      17.04.2017 15:36

      А чем https://golang.org/doc/effective_go.html не устроил?


      1. JekaMas
        17.04.2017 16:09

        А в каком месте это «проект»? Это набор объяснений устройства go, советов и небольших примеров, не более того.


        1. Prolych
          17.04.2017 19:53
          -1

          Так вы ж просили «Подчеркиваю, не хороших проектов, не удобных пакетов, а именно хорошего golang кода», в эффективном Го именно примеры хорошего кода: о)


          1. JekaMas
            17.04.2017 19:55

            Ерунда, далее без комментариев.


            1. Prolych
              17.04.2017 20:16
              -1

              Тю, странно, в стартпосте вы просите примеры хорошего кода, но «не хороших проектов», потом удивляетесь, «А в каком месте это «проект»?».
              Вы уж как-нить определитесь, вам нужны примеры хорошего кода, или вам нужен проект?: о)