Всем привет!
Это третий выпуск дайджеста, посвящённого языку программирования 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]
Спасибо за внимание!
Это третий выпуск дайджеста, посвящённого языку программирования 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]
Спасибо за внимание!
Поделиться с друзьями
JekaMas
Посмотрел очередной дайджест и хочу поднять вопрос с гоферам: есть ли такие проекты, в которых хороший Golang код? Не perl-go, java-go, php-go и так далее.
Советовали посмотреть kubernates, но и там все то де: интерфейсы ради интерфейсов на том же уровне, что и реализация…
Вполне серьезно спрашиваю: хочу хотя бы небольшую подборку хорошего гошногг кода сделать. Подчеркиваю, не хороших проектов, не удобных пакетов, а именно хорошего golang кода.
fokusov
Я смотрю хороший код в стандартной библиотеке. Рекомендую начать оттуда. К примеру, вот код из net/http https://golang.org/src/net/http/
JekaMas
Читаю стандартную библиотеку пару лет и она не хороша везде. Очень чувствуется, что ее писали разные люди и часто еще не имеющие гошного опыта, просто в силу того, что его они же только что создали.
Так что «с одной стороны да, но вцелом нет»: однобуквенные переменные, ошибки через панику, даже есть велосипедные реализации try catch, методы по сотне строк.
Из хорошего: мне очень нравится элегантное решение с сортировкой. Универсальное, не зависящее от типов и не требующее обобщенных типов, интерфейс из одного метода — отличное решение.
JekaMas
Конкретно к net: много ненужного выделения памяти, что мы все знаем и почему стали появляться проекты вроде fasthttp; создание ошибок на месте их появления, ошибки не имеют ни типов, ни своих интерфейсов, ни кодов ошибок. У Дейва хорошо разобрано про ошибки — подход стандартной библиотеки вынуждает меня или бездумно прокидывать ошибки выше, или также бездумно заменять своими, теряя контекст, или подавлять, или проверять ошибки по сообщениям в них, что совсем печально.
isden
А вот это не смотрели? Говорят, что вполне прилично они пишут:
https://github.com/hashicorp/vault
https://github.com/hashicorp/consul
JekaMas
Ццблагодарю, посмотрю внимательнее, но пока есть сомнения:
https://github.com/hashicorp/vault/blob/master/vault/acl.go — метод за 120 строк с 4х кратной вложенностью if, использование goto без критичной необходимости.
isden
> использование goto без критичной необходимости
На мой взгляд, вот в данном конкретном случае тут ничего страшного в использовании goto нет, наоборот упрощает код.
> с 4х кратной вложенностью if
Тут согласен, но, опять же, ничего особо страшного в этом не вижу. После ада с 8-10 if'ами, которое мне доводилось видеть, читается довольно легко.
JekaMas
Непонятна необходимость делать громадный метод со сложной логикой, которую после побеждаем при помощи goto. Хотя можно было сразу делать простые методы. Сейчас же он делаем Много чего в себе, ответственность у него большая, как следствие тесты не маленькие, а такие же большие по сути.
isden
Если посмотреть с этой стороны — то да, один из анти-паттернов, лучше разбивать на несколько более простых. Возможно так было сделано ради оптимизации по скорости выполнения.
JekaMas
тоже странный аргумент: если ребята дошли до той черты, когда дополнительный вызов метода значим, то зачем они взяли язык с GC? Ну или, почему тогда на этот «супер-критичный» по производительности метод не бенчмарков?
В общем, не думаю, что такова история. Больше похоже на фигак-фигак.
isden
С GC же вроде с недавних пор все хорошо? В смысле, он умно запускается при паузах, и если не успевает за какое-то время — то переносится на следующий раз. Вроде читал о подобном некоторое время назад.
Насчет «фигак-фигак» — есть сомнения, ребята довольно серьезные, и они свой софт еще в виде enterprise editions продают.
JekaMas
Не совсем с GC. Если было бы так, то при любом размере кучи не было бы длительных остановок.
Верным утверждением было бы, что 90-й процентиль stop-the-world не превосходит миллисекунды. В подтверждение моих слов,например — это на 1.6, где вроде как все паузы должны были быть менее 10ms, но на большой map паузы достигают намного больших значений.
Про «фигак-фигак» — не вижу взаимосвязи между «серьезные ребята» и «хороший код».
isden
Действительно, судя по всему, ждем 1.9.
JekaMas
Станет получше, более конкурентный GC и не всегда съедающий по целому кванту времени, да. Но если есть GC и активно растущая куса, то рано или поздно отложенную на предыдущих шагах GC работу придется сделать и отложенная длительная пауза GC станет только в разы больше.
Фактически сейчас улучшается самый ожидаемый случай с GC, и ухудшается самый печальный.
Prolych
А чем https://golang.org/doc/effective_go.html не устроил?
JekaMas
А в каком месте это «проект»? Это набор объяснений устройства go, советов и небольших примеров, не более того.
Prolych
Так вы ж просили «Подчеркиваю, не хороших проектов, не удобных пакетов, а именно хорошего golang кода», в эффективном Го именно примеры хорошего кода: о)
JekaMas
Ерунда, далее без комментариев.
Prolych
Тю, странно, в стартпосте вы просите примеры хорошего кода, но «не хороших проектов», потом удивляетесь, «А в каком месте это «проект»?».
Вы уж как-нить определитесь, вам нужны примеры хорошего кода, или вам нужен проект?: о)