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

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

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

Обратная связь: @justskiv
Download 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 #конференция
Воспроизводимость и верификация тулчейна Go

https://go.dev/blog/rebuild

Russ Cox в статье для официального блога Go пишет про проблему supply chain attack, как она связана с воспроизводимостью билдов (reproducible builds), как это помогает верифицировать билды.

Также тут подробно разобрано, что было с воспроизводимостью в разных версия Go, и что в Go 1.21 она "идеальная":

> Go 1.21.0 is the first Go toolchain with perfectly reproducible builds

Думаю, девопсам эта статья будет особенно полезна и интересна

#статья #russ_cox
Как вы предпочитаете именовать подобные функции - вместо MyFunc? (см. опрос ниже)

Расскажите в комментариях, почему именно так. Считаете ли вы какой-то подход идиоматичным?
Garbage Collection: как работает и почему это важно знать

https://habr.com/ru/companies/avito/articles/753244/

Хорошая авторская статья про GC в Go - с кучей примеров и картинок(!) ☕️
Читается легко, интересно.

Ещё раз подчеркну - это в кои-то веки авторская статья, а не перевод. В последнее время это стало редкостью.

#post #habr #gc
Please open Telegram to view this post
VIEW IN TELEGRAM
Profile-guided optimization in Go 1.21

https://go.dev/blog/pgo

Michael Pratt в статье в официальном блоге Go рассказывает про PGO - что это и как пользоваться.
И самое интересное - он показывает конкретный пример оптимизации приложения.

Полная документация по PGO тут: https://go.dev/doc/pgo

#pgo #go_official