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

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

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

Обратная связь: @justskiv
Download Telegram
От чего зависит скорость разработчика? / GoGetPodcast №9

https://youtu.be/RxkX0NapCDw

Что обсуждается:
- Факторы, которые влияют на скорость работы разработчика
- Цена и вероятность ошибок во время разработки
- Почему Линус так быстро пишет код? Почему Star Citizen никогда не выйдет?
и др.

Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com

————
Go Get Podcast - подкаст про Go и всё что с ним связано

#gogetpodcast #podcast
💻 С чего начать изучать GoLang? - Ультимативный пост

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

Must have, нестареющая классика:

- A Tour of Go - ресурс, с которого 100% надо начинать. Тут вас просто и быстро проведут по всем важным аспектам языка. Прохождение займёт ~4 часа часа, и после этого вы будете знать практически всё, что необходимо
- Effective Go - здесь вас научат не просто писать код, а делать это красиво и эффективно.
- Книга "Язык программирования Go", Донован Алан А. А., Керниган Брайан У - отличная книга, в которой подробно разобрано практически всё, что есть в языке, приведены примеры различных подводных камней и нюансов. Часто в книге объясняется, почему авторы языка сделали именно так, а не иначе. Авторы известные и авторитетные разработчики.

Другие интересные способы начать изучение:

- Go by Example - отличный набор простых и полезных примеров с комментариями
- Learn X in Y minutes – оригинальный и интересный способ изучения языка - вам показывают большой кусок кода с комментариями, который быстро познакомит вас со всеми основами
- Go developer roadmap, о котором я уже писал

Другие ресурсы:

- Николай Тузов - GoLang - YouTube канал с такими же ультимативными уроками по Go ☺️
- Golang Дайджест - ТГ-канал с регулярными подборками материалов по Go
- Go 101 - книга, сосредоточенная на синтаксисе / семантике языка, и на вещах связанных с runtime. Подойдет и новичкам, и опытным разработчикам - для более глубокого понимания.
- How to Write Go Code - пост с рекомендациями по написанию кода от авторов языка
- Go или не Go? от Умпутуна из Radio-T

➡️Но самое главное - не забывайте, что теория это хорошо, но практика важнее. Пишите код, много кода. Только так вы научитесь хорошо писать на Go.

Если вы знаете другие крутые материалы, сервисы и т.п., пишите в комментариях. Самое интересное я буду добавлять в пост.

#golang #guides #подборки
Please open Telegram to view this post
VIEW IN 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