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

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

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

Обратная связь: @justskiv
Download Telegram
Какое значение выведет программа? (см. пост выше)
Anonymous Quiz
38%
Error
62%
Success
Почему `nil error value` не равно nil?

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

Вот официальный ответ разработчиков на этот вопрос.

Также хорошее объяснение с более сложным примером вы найдёте в книге "Язык программирования Go" Донован А. Керниган Б. (стр. 224 - глава 7, Интерфейсы)

#go_traps
Подводные камни Go

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

"nil error value", передача слайса по значению и т.п. Пусть даже самые банальные и общеизвестные.

Если соберём хорошую подборку, я готов сделать полноценный ролик на эту тему на своём канале.
💻gRPC сервис авторизации - Огромный Гайд

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

Он доступен в двух вариантах:

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

Сервис пишется с нуля, попутно затрагивается множество аспектов:

- Правильная архитектура проекта
- Как писать ProtoBuf контракты, генерировать по ним код
- Как полноценно тестировать свой сервис, написание функциональных тестов
- Как правильно работать с паролями и токенами авторизации
- Взаимодействие между сервисами
- Работа с миграциями

И многое другое.

#guide #grpc
Please open Telegram to view this post
VIEW IN TELEGRAM
Исследование Go-разработчиков от авторов языка

https://go.dev/blog/survey2023-h2-results

Основные результаты:

- Разработчики Go заявили, что они больше заинтересованы в инструментах AI/ML, которые улучшают качество кода, который они пишут, а не пишут код для них. Круглосуточно доступный "ревьюер" может стать одной из наиболее полезных фич ИИ.

- Эксперимент с шаблонами проектов (gonew), похоже, решает критические проблемы Go-разработчиков (особенно новичков в Go). Основываясь на этих результатах, можно сказать что gonew может существенно снизить порог входа в Go для новичков.

- 3/4 респондентов работают над программным обеспечением на Go, которое также использует облачные сервисы; это свидетельствует о том, что разработчики рассматривают Go как язык для современной облачной разработки.

- Настроение разработчиков по отношению к Go остается крайне позитивным: 90% респондентов опроса заявили, что удовлетворены работой с Go в течение предыдущего года.

#survey #go_official
Открытое собеседование Senior Go разработчика

https://youtu.be/GD0iHLucYdU

Самые популярные интервьюеры русскоязычного Go сообщества - Даниил Подольский (Yadro) и Владимир Балун (Yandex) провели собеседование сеньора на канале Николая Тузова.

Собеседование состоит из двух частей - общие вопросы по знаменитому опроснику Даниила и лайв-кодинг с Владимиром.

В роли кандидата выступил Антон Зиновьев - разработчик и техлид из компании Gaijin.

#собеседование
Как устроена память в Go

https://habr.com/ru/companies/vk/articles/776766/

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

#article #memory
Go Tour на стероидах от ArdanLabs

https://www.ardanlabs.com/blog/2024/01/ultimate-go-tour.html

William Kennedy, известный нам по крутым гайдам по внутренностям Go, решил, что официальный Go Tour недостаточно хорош, и предлагает нам свою версию.

Что не нравилось:

- Официальный Тур не является всеобъемлющим как по количеству примеров, так и по содержанию, объясняющему эти примеры
- Содержание практически мгновенно переходит от новичка к эксперту

Вильям поколдовал и получилось это: tour.ardanlabs.com
Лучше оно или хуже - решать вам. Но оно точно стоит внимания.

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

#ardanlabs #go_tour
Forwarded from Go Update
🎉 Состоялся релиз Go 1.22

Как-то буднично и без предварительных фанфар состоялся релиз новой версии языка. Изменений много, постараюсь остановится лишь на самых значимых:

— Расширение синтаксиса циклов for. Теперь можно писать


for i := range 10 {
println(i)
}


Вместо


for i := 0; i < 10; i++ {
println(i)
}


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

— Изменение принципов создания переменных внутри объявления циклов. Об этом я писал вот тут, но если в кратце больше не нужна конструкция вида tt := tt внутри циклов.

— Итераторы доступны в экспериментальном режиме. Включить и поиграться можно через переменную окружения GOEXPERIMENT=rangefunc. Можно установить через go env -w GOEXPERIMENT=rangefunc если не хочется каждый раз возится. В комплекте так-же идет пакет iter который позволяет создавать pull итераторы из push. Почитать про все это от разработчиков языка можно тут.

go test -cover теперь корректно выводит 0% покрытия для пакетов где нет тестов, но есть исполняемый код. Для пакетов где нет go файлов или они содержат только структуры выводит старое [no test files].

— Переделали trace – и пакет и UI.

net/http роутер теперь поддерживает указание метода и паттерны. Про это расширение роутера было много статей и блогов, поэтому тут будет просто упоминание.

— Первый v2 пакет math/rand/v2. Заменили Mitchell & Reeds LFSR генератор rand.Source случайных чисел на более современный и криптографически стойкий ChaCha8. А сие значит, что его можно использовать для криптографических операций. Плюс он быстрее и жрет меньше памяти. Так-же есть PCG генератор, который не криптографически стойкий, но еще быстрее. Кроме этого пакет получил дополнительные методы (в том числе дженерик функция rand.N для работы с семейством int типов, например time.Duration).

— PGO (оптимизация использующая данные профилировщика) теперь генерирует еще более быстрый код. Обещают от 2% др 14% прироста производительности при использовании PGO.

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

— Оптимизацию "встраивание функций" сделали еще более умной - теперь она пытается отработать внутри циклов и других горячих местах, и наоборот пытается не инлайнить в коде обработки паник. Но пока все это тоже в экспериментальном режиме. Попробовать можно через GOEXPERIMENT=newinliner. Почитать тут.

— Из лично приятного: в пакет slices добралась функция Concat для соединения произвольного числа слайсов. Больше не нужно городить цепочку append.

На мой взгляд релиз в целом приятный, но половинчатый: многое из действительно интересных вещей скрыты за флагом GOEXPERIMENT, а часть вообще осталась ждать Go 1.23. Тем не менее обновится стоит, хотя-бы ради нового синтаксиса циклов for.

Полный список изменений как всегда тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
Пишем RPG на Go - серия статей

0) https://habr.com/ru/articles/791192/
0.5) https://habr.com/ru/articles/799497/

Искандер активно продвигает GameDev на Go, и вот его очередной проект - обучающая серия статей по написанию RPG на Ebitengine.

Пока написаны только две вступительные статьи, остальное в процессе.

Напомню, что у Искандера уже есть готовая игра - Roboden, написанная на Go, которая уже добралась до Steam и даже до Steamdeck.

————
Если вам интересен подобный формат, предлагаю поддержать автора, чтобы у него точно была мотивация довести проект до конца 👾

#guide #gamedev #quasilyte
Please open Telegram to view this post
VIEW IN TELEGRAM
Сторисы выкладывать тут не буду, но если хотите гоферов в реакты под постами, вы знаете за кого голосовать 👾

https://t.me/boost/golang_digest

Можно в полдень 😉

————
UPD 2: Два гофера есть 👾🤡
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Красивое решение для борьбы с ботами на серверах

Ещё один интересный пост от Daily Geek News:
https://t.me/daily_geek_news/230

Речь про endlessh-go
- решение для защиты серверов, работающих с SSH. На самом деле, это просто реализация Endlessh на Go с добавлением метрик и дашборда в Графане.

Для тех, кто не очень понимает автора оригинально поста, давайте разберемся о чем речь:

- Тарпит (Tar pit) - технология безопасности, предназначенная для замедления атакующего, путем увеличения времени ответа сервера. Это заставляет сканирующие боты или атакующие инструменты тратить гораздо больше времени на попытку подключения к серверу, что затрудняет атаку. Вот более подробная статья на эту тему.

- Ханипот (Honeypot) - система безопасности, представляющая собой ложную цель для атакующих. Она преднамеренно содержит уязвимости для привлечения хакеров, позволяя администраторам отслеживать попытки несанкционированного доступа и анализировать методы атаки.
Хорошую статью на эту тему на нашел. Если знаете, делитесь в комментариях, а пока вот такая (не читал, не ручаюсь что хорошая)

- Экспортирование данных в Графану позволяет наглядно отслеживать активность вокруг сервера SSH, строить на этом какую-то аналитку

#project #cybersecurity
Очередная дискуссия про обработку ошибок в Go

https://habr.com/ru/companies/karuna/articles/830346/

Пост написан по мотивам поста этого же автора в его Telegram-канале.

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

Если ты новичок, можешь погрузиться в тему - что же у нас не так с обработкой ошибок. А если опытный разработчик, можешь в очередной раз присоединиться к дискуссии и почитать proposals 🍾

————

Сам я выкручиваюсь обычно так:

func myFunc() error {
const op = "mypackage.myFunc"
// ...
if err != nil {
return fmt.Errorf("%s: %w", op, err)
}


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

#error_handling
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Go Update
🎉 Вышел Go 1.23! 🎉

Ключевые нововведения:
Итераторы — больше вот тут. TLDR: теперь можно делать range по таким функциям:


func(func() bool)
func(func(K) bool)
func(func(K, V) bool)


• Opt-in телеметрия — опциональный сбор метрик и периодическая отправка их. Детальный док вот тут. TLDR: эта вещь позволяет понять как часто и каким командами пользуются Go разработчики, какие флаги они применяют и как часто люди сталкиваются с ошибками компилятора. Статистика обезличенная, а сам формат полностью в открытом доступе. Важно! Сбор по умолчанию включен, но никуда не отсылает метрики. Включить отправку можно с помощью команды go telemetry on. Выключить полностью можно с помощью команды go telemetry off.
• Директива godebug в go.mod файлах.
• Больше нельзя обратится к неэкспортируемым именам в стандартной библиотеке с помощью //go:linkname (за исключением ряда функций).
time.Timer и time.Ticker больше не нужно останавливать для того, что-бы сборщик мусора смог их собрать. Во вторых, канал который ассоциирован с этими таймерами теперь небуферизированный и гарантирует, что в канале нет данных после остановки. Другими словами, после остановки time.Timer и time.Ticker больше не требуется пытаться вычитать данные из канала, на случай если таймер уже истек и послал данные в канал. Включается только если go.mod содержит go 1.23.0 и выше. Заметку про это обновление можно прочитать вот тут.
• Пакет unique. Про него тоже писал раньше.
Много функции для итераторов.

Полное описание релиза вот тут.
Golang Дайджест
🎉 Вышел Go 1.23! 🎉 Ключевые нововведения: • Итераторы — больше вот тут. TLDR: теперь можно делать range по таким функциям: func(func() bool) func(func(K) bool) func(func(K, V) bool) • Opt-in телеметрия — опциональный сбор метрик и периодическая отправка…
Если уж читать краткую выжимку самого интересного, то лучше у Димы (репост из его канала). Он всегда пристально следит за развитием языка, глубоко погружен в тему.

В общем, крайне рекомендую. Не реклама ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Thank Go! (Anton Zhiyanov)
Go 1.23

Тут вышел Go 1.23, ну а мы с вами успели разобрать основные изменения заранее:

Итераторы
Таймеры
Уникальные значения
Скопировать каталог
Куки

Все вместе с интерактивными примерами:
https://antonz.org/go-1-23
Range Over Function Types

https://go.dev/blog/range-functions

Подробный пост в официальном блоге разработчиков Go о том, зачем добавили итераторы в Go 1.23, что они из себя представляют, как их использовать, приводят примеры.

#go_official #go_1_23
Паттерн Functional Options

Это очень популярный подход, который я встречал во всех компаниях, в которых довелось писать код на Go.

В этом посте я подробно описал суть проблемы, которую он решает. А в этом разобрал суть паттерна и его реализацию.

#pattern #guide