Golang Дайджест
7.76K subscribers
36 photos
1 file
165 links
Самое интересное из мира Go: новости, статьи, проекты, сервисы, изменения в языке и др.

Посты публикуются не часто - только самое важное, с чем я лично ознакомился.

Поэтому можно не мьютить канал =)

Обратная связь: @justskiv
Download Telegram
Clean Env - минималистичная библиотека для работы с конфигурацией

https://github.com/ilyakaznacheev/cleanenv

Чаще всего для конфигурации в Go используют spf13/viper, наверняка вы о нём слышали.

Но если вам хочется минималистичности и простоты, Clean Env вам понравится. Тут нет ничего лишнего, а значит легко разобраться, сложно сломать. При этом, всё необходимое тут имеется, в том числе поддержка популярных форматов конфига: yaml, json, toml, env.

Особенно мне понравилась работа с тегами структуры, в которую будет парситься конфиг:

- env-default - дефолтные значения для параметров
- yaml / json / env - имена параметров для парсинге из разных источников
- env-required - отмечает поле как обязательное
- и др.

У Viper не все из этого есть, а для задания имени параметров нужно использовать неочевидный тег - mapstructure.

————
Кстати, если вам вдруг не понравился ни Viper, ни Clean Env, можете посмотреть в сторону koanf, тоже интересный и популярный вариант.

————
💻 Расскажите в комментариях, какими библиотеками для конфигурации вы пользовались, какие вам больше понравились и почему

#package #configuration
Please open Telegram to view this post
VIEW IN TELEGRAM
slog - новый логгер в стандартной библиотеке

В версии Go 1.21 в stdlib будет добавлен пакет для работы с логами - slog. Сейчас его можно попробовать в виде стороннего пакета в golang/x.

Что почитать, чтобы быть в курсе:
- Дискуссия на гитхабе, с которой всё началось
- Анонс дизайн-документа slog
-
Proposal: Structured Logging, который стал результатом дискуссии
- Подробнейший разбор slog - очень советую почитать для понимания мотивации и решения
- Ещё одна статья на эту тему

————
Напомню, чего не хватало в стандартном логгере - log:

- Нет уровней логирования, например - Info, Error, Debug и др. Без этого логи сложнее фильтровать, разделять по важности.
- Нет поддержки structured logs - мы можем выводить только plain text, и не можем использовать формат, который легко парсится разными сервисами (kibana, grafana и т.п.), например - JSON
- Нельзя добавить доп. поля для контекста: userID, traceID и т.п.
и др.

#logs #package #news
Подкаст про GameDev на Go

Искандер Шарипов запустил подкаст про разработку разработку игр на Go. Первый эпизод уже доступен на Mave:

https://gg.mave.digital/ep-1

Приглашённый гость: Андрей Апанасик.

За новостями подкаста можно следить тут.

О чем выпуск:

* 00:00 - Интро, представляем ведущих
* 10:10 - Как Андрей вкатился в геймдев
* 11:50 - Стартап Андрея (balancy.co)
* 17:50 - Маппинг схемы между админкой balancy и игрой
* 19:60 - Визуальная админка в balancy для удобства геймдизайнеров
* 21:50 - Какие движки поддерживает balancy
* 22:20 - Любимые инструменты разработки игр Андрея
* 29:10 - О JSON в Unity
* 30:50 - Стратегия развития Unity
* 35:10 - Сколько монобехов - слишком много?
* 40:10 - CGo в игрушках на Go
* 45:20 - Некоторые плюсы и минусы особенностей Go в геймдеве
* 48:20 - ECS в Go и Unity (и немного про Factorio)
* 1:09:50 - Особенности рендеринга в Ebitengine и многопоточка в играх на Go
* 1:19:50 - Говорим о Nakama (open source game server, написанный на Go)
* 1:26:35 - Сетевой код для игр на Go, headless сборки на Ebitengine и Unity
* 1:32:30 - Платформы, под которые можно собирать игры на Ebitengine
* 1:37:40 - В какие игрушки играет Апанасик

#gamedev #podcast
Давайте обсудим, книги по Go

Расскажите, что вы читали в последнее время, и что из этого вам понравилось? Желательно, чтобы это были свежие и актуальные книги.

А если ещё и напишете комментарий, то коллеги будут вам особенно благодарны: что понравилось / не понравилось, о чем в целом книга, стоит ли обратить на неё внимание, почему стоит?

Про must have "Язык программирования Go" Кернигана не пишем, про него и так все знают ❤️ Да и она уже не очень свежая.

💻 Скидывать электронные копии книг в комментариях нельзя

#discussion #books
Please open Telegram to view this post
VIEW IN TELEGRAM
В каких случаях вы считаете правильным использование именованных значений, возвращаемых функциями, т.е.:

`func myFunc() (x int, y int, z int) { ... }` Можно выбрать несколько вариантов. Также делитесь своим мнение в комментах.
Anonymous Poll
35%
В случае использования возвращаемого значения в defer
37%
Когда без имени непонятно, что именно возвращает функция
12%
Всегда когда есть что возвращать - сэкономим на строчках с объявлением переменных
20%
Никогда, я против этой конструкции!
1%
Свой вариант (напишу в комментах)
24%
Не знаю / Посмотреть ответы
Golang Дайджест
Давайте обсудим, книги по Go Расскажите, что вы читали в последнее время, и что из этого вам понравилось? Желательно, чтобы это были свежие и актуальные книги. А если ещё и напишете комментарий, то коллеги будут вам особенно благодарны: что понравилось /…
Обсудим книги для разработчиков

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

Расскажите, что вы посоветуете почитать Go-разработчикам, помимо литературы по Go?

Как и в прошлый раз, огромный жирный лайк тем, кто не поленится и напишет развернутый комментарий к своей книге / подборке: что понравилось / не понравилось, о чем в целом книга, почему стоит обратить на неё внимание?

💻 Скидывать электронные копии книг в комментариях нельзя

————
p.s. За фото спасибо Алексею Акуловичу ❤️

#discussion #books
Please open Telegram to view this post
VIEW IN TELEGRAM
Ого, а вот это интересно! GoNB — экспериментальное ядро Go Notebook, которое позволяет запускать код Go в Jupyter Notebook и его вариациях (например, в Google Colab). В отличие от Go Playground и аналогов, которые позволяют запускать го код в онлайне, тут еще наследуются всякие интересные юпитер-ноутбуковские фишки, вроде вывода html, рисования графиков, прогрессбаров и т.п., т.е. можно создавать юпитеровский блокнот (как для Питона) – с описанием, примерами задачек и возможностью сразу проверить результат, может быть полезно для обучения, конспектов и т.д.
Репозиторий и инструкция
Там же есть пример ноутбука на гугл колабе
#GO
Таймауты HTTP Server в Go - как работают и зачем нужны

В стандартной библиотеке Go есть замечательный пакет net/http, в котором есть структура http.Server. Это основная структура для написания сервиса, обрабатывающего HTTP запросы. У http.Server довольно много интересных параметров, но здесь нам интересны таймауты:

- ReadHeaderTimeout - время, отводимое на чтение заголовков запроса
- ReadTimeout - максимальная продолжительность чтения полного запроса, включая тело
- WriteTimeout - максимальное время ожидания до окончания записи ответа
- IdleTimeout - максимальное время ожидания следующего запроса, используется keep-alive

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

1. Подключение установлено
|--- ReadHeaderTimeout (если установлен) ---|
2. Заголовки запроса получены
|--- ReadTimeout (если установлен) ---|
3. Тело запроса получено, начинается обработка запроса
4. Обработка завершена, сервер начинает отправлять ответ
|--- WriteTimeout (если установлен) ---|
5. Ответ полностью отправлен клиенту
|--- IdleTimeout (если установлен и соединение остается открытым) ---|
6. Если не было другого запроса в течение IdleTimeout, соединение закрывается
7. Если новый запрос получен до IdleTimeout, процесс начинается сначала с шага 2

Зачем нужно столько таймаутов?

- Борьба с Slowloris атаками: это тип атаки, при которой злоумышленник устанавливает соединение с сервером и отправляет запрос нуу оооочень медленно. Это может приводить к исчерпанию ресурсов сервера и его последующему отказу. Установка ReadHeaderTimeout и ReadTimeout может помочь.
- Отправка больших данных: возможно, клиенты отправляют нам что-то очень большое, и мы не хотим чтобы это заняло слишком много времени. В этом случае помогает ReadTimeout
- Обратная ситуация - работа с ооочень медленными клиентами: Встречаются клиенты со слабым каналом, которые принимают наш ответ очень долго (например, некоторые устройства IoT или просто регионы со слабым интернет-покрытием). В этом случае, если не установить WriteTimeout, сервер может ждать бесконечно долго, пытаясь отправить ответ, что может привести к исчерпанию ресурсов.
- Ограничение использования ресурсов: При большом количестве запросов, особенно в микросервисных архитектурах, установка IdleTimeout помогает освободить ресурсы от долгоживущих соединений, которые больше не используются.

————
☁️ Если я где-то ошибся или был неточен, пожалуйста, напишите об этом в комментах, я всё поправлю

💻 Идея написания этого поста возникла во время записи ролика по REST API, в котором у меня не хватило времени на полноценное объяснение

#гайды #golang #http
Please open Telegram to view this post
VIEW IN TELEGRAM
Ультимативный гайд по созданию REST API сервера

Доступно в дух форматах:

- Видео на YouTube
- Статья на Хабре

В гайде очень подробно разбирается процесс создания REST API сервера на примере URL Shortener'а и его деплой на сервер через GitHub Actions.

На выходе получается готовый к использованию pet-проект (а не просто игрушка в стол):

- для него подобран актуальный http-роутер - chi
- ответственная работа с логами с использованием slog, которого мы очень ждём в stdlib
- разобраны различные виды тестов: unit-тесты, тесты хэндлеров и функциональные,
- объясняется, как настроить автоматический деплой через GitHub Actions
и др.

#гайды #rest_api
gonew - генератор каркасов проектов в стандартной библиотеке

https://go.dev/blog/gonew

Новость из официального блога авторов Go, совсем свежая

Авторы языка экспериментируют с новым пакетом - gonew, котрый умеет генерировать проект из указанного шаблона. Шаблоны представляют собой обычные пакеты, которые управляются через go mod, что очень удобно.

Сейчас gonew минималистичен, и авторы активно собирают фидбэк сообщества, чтобы понимать как его развивать дальше.

Как установить:

go install golang.org/x/tools/cmd/gonew@latest

Как пользоваться:

gonew golang.org/x/example/helloserver example.com/myserver

Примеры шаблонов от авторов:

- hello: консольная утилита
- helloserver: HTTP-сервер

————

Мне очень нравится эта идея, т.к. это ещё один шаг в сторону стандартизации накапливющегося зоопарка, как и в случае slog. Сейчас у каждой компании (а то и у многих отдельных разработчиков) есть свой велосипед для генерации бойлерплэйтов, который далеко не тривиален. И выглядит это немного печально.

⚠️ Ещё раз подчеркиваю - пакет экспериментальный, а значит не спешите тащить его в свои проекты, особенно рабочие. Сейчас с ним можно просто поиграть, разобраться и написать фидбэк автрам, если есть что сказать

Расскажите в комментариях, что думаете об этой штуке?

#package #experimental
Please open Telegram to view this post
VIEW IN TELEGRAM
Опрос для исследования рынка Go-разработчиков от DevCrowd

https://survey.alchemer.eu/s3/90588566/Go-2023

Исследование интересное, поэтому предлагаю и вам сделать свой небольшой вклад, а потом будем вместе ждать отчет с результатами.

Что хотят выяснить:

- Какие навыки для go-разработчиков самые важные
- Какие инструменты используются в работе
- Как попадают в профессию и куда из нее уходят
- Полезные для развития каналы, курсы и книги

#опрос
Forwarded from Go Update
Релиз Go 1.21

Вот и состоялся релиз новой версии Go. Кроме того, что указано здесь, у нас так-же появились:

- Довольной большой пакет slices: среди прочего содержит функции Min / Max, функцию сортировки и функцию поиска в сортированном слайсе. И больше не нужно писать страшные блоки вставки и удаления элементов из слайса.
- Пакет maps: по сравнению со слайсами как-то бедновато, но есть удобная функция копирования.
- Пакет cmp: содержит обьявление всех сравниваемых по порядку типов и две базовые функции для работы с ними. Нужно скорее для пакетов maps и slices, а так-же разработчикам библиотек с коллекциями.
- Profile-guide optimization (PGO - оптимизация основанная на данных профилировки) вышла из превью и теперь применяется всегда если присутствует файл default.pgo в директории main пакета. Говорят, что благодаря ей удалось ускорить компилятор примерно на 6%.
- Улучшение пакета context: теперь можно вешать функцию на отмену контекста (удобно когда вам нужно закрыть канал или прекратить чтение из сокета) и отвязать дочерний контекст от отмены родителя.
- При выводе очень глубоких стеков теперь показывают 50 самых верхних и 50 самых нижних фреймов (названий функции) вместо 100 самых верхних как это было ранее. Должно помочь с отладкой паник в рекурсивных функциях.
Анонимная сеть в 200 строк кода на Go

https://habr.com/ru/articles/745256/

Отличный пост для тех, кто хочет немного погрузиться в понятие анонимных сетей и не тратить на это много времени.

Всё как мы любим: краткий и интересный ликбез по теме, затем практика - реализация анонимной сети своими руками.

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

#article #dyi #сети
Интересные блоги по Go

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

- https://research.swtch.com - автор блога Russ Cox - ведущий разработчик Go. Регулярно пишет о планах развития языка, о мотивации различных решений и в целом про язык

- https://go.dev/blog - официальный блог авторов Go

- https://www.ardanlabs.com/categories/go-programing/ - ArdanLabs - отличные образовательные посты, разборы различных нюансов и тонкостей языка

- https://dave.cheney.net - контрибьютор Go. Блог перестал обновляться с 2021 года, но имеющиеся посты часто тоже очень интересны.

#blogs
Golang Дайджест
Интересные блоги по Go Чтение блогов часто может быть полезней чтения книг, особенно если у вас уже есть опыт разработки на Go. Это помогает быть в курсе текущих тенденций развития языка, понимать мотивацию авторов, узнавать новые тонкости внутреннего устройства…
Какие блоги по Go читаете вы?

Помимо приведенных выше

Можете просто скидывать ссылки, но краткий комментарий делает ссылку в разы ценнее - почему на этот блог стоит обратить внимание?

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

#discussion #blogs
Авторы Go про slog и structured logs

https://go.dev/blog/slog

Свежий пост, в котором авторы языка рассказывают про structured logs и пакет slog:

- Краткое введение в slog
- Производительность
- Процесс дизайна пакета slog

#post #logs #slog
Серия постов про новый пакет slices от ArdanLabs

В статьях разбираются функции из нового пакета:

- Binary Search
- Clip, Clone, and Compact
- Compare
- Contains, Delete, and Equal

В случае постов ArdanLabs и конкретно от William Kennedy, мои комментарии излишни - он пишет хорошо, интересно, с кучей примеров.

#ardanlabs
Конференция по Go от Podlodka Crew

11 сентября состоится очередная конференция Podlodka Go Crew

Общая тема в этот раз - Highload на Go:

- заглянем под капот устройства памяти
- научимся превентивно находить потенциальные очаги чрезмерной нагрузки
- посмотрим на лучшие практики нагрузочного тестирования
- изучим масштабируемую технологию NATS JetStream для очередей и асинхронной коммуникации

Кроме того, каждый желающий сможет выступить на открытом микрофоне.

Подробности тут
————

Если решили купить билет, держите промокод на скидку в 500р: ntuzov_go2

#podlodka #конференция