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

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

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

Обратная связь: @justskiv
Download Telegram
Почему `nil error value` не равно nil?

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

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

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

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

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

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

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

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

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

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

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

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

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

#guide #grpc
Please open Telegram to view this post
VIEW IN TELEGRAM
21🔥54👍188🫡1
Исследование 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
👍36🔥106🤔1
Открытое собеседование Senior Go разработчика

https://youtu.be/GD0iHLucYdU

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

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

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

#собеседование
👍16🔥53🤔2
Как устроена память в Go

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

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

#article #memory
👍34🔥64🤯1
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
🔥41👍97
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.

Полный список изменений как всегда тут.
🔥55👍2011
routegroup - легковесная обёртка для группировки и интеграции middleware в http.ServeMux

https://github.com/go-pkgz/routegroup

Автор библиотеки: Umputun, один из ведущих подкаста Радио-Т

Описание его словами:

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

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


Оригинальный пост: https://t.me/daily_geek_news/218

#library #http #mux
🔥23👍52
Пишем 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
🔥3411🤯7👍2
Сторисы выкладывать тут не буду, но если хотите гоферов в реакты под постами, вы знаете за кого голосовать 👾

https://t.me/boost/golang_digest

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

————
UPD 2: Два гофера есть 👾🤡
Please open Telegram to view this post
VIEW IN TELEGRAM
1893811👍7
Как начать разрабатывать игры на Go

https://www.quasilyte.dev/ebiten/ru/

Искандер написал подробный гайд для людей, которые делают свои первые шаги в геймдеве на Go:

- Развенчание популярных мифов
- Про Ebitengine
- Ресурсы для обучения
- Важные библиотеки
и др.

От автора:

Тебе хочется создавать игры на Go? Ebitengine - отличный вариант.
Этот документ был создан чтобы упростить твоё путешествие.
...
tl;dr: Go - подходящий язык, Ebitengine - неплохой игровой движок, сообщество - живое и расширяется


#guide #gamedev #quasilyte
1612🔥52
Красивое решение для борьбы с ботами на серверах

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

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

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

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

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

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

#project #cybersecurity
25👍104🔥3
Очередная дискуссия про обработку ошибок в 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
24👍14🤔71
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. Про него тоже писал раньше.
Много функции для итераторов.

Полное описание релиза вот тут.
🔥418👍7
Go Update
🎉 Вышел 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
2410🔥5👍1
Forwarded from Thank Go! (Anton Zhiyanov)
Go 1.23

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

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

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

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

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

#go_official #go_1_23
8🔥11👍72
Паттерн Functional Options

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

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

#pattern #guide
924🔥103👍2
unique - новый пакет в стандартной библиотеке Go 1.23

https://go.dev/blog/unique

Ещё один интересный пост в официальном блоге авторов Go с подробным объяснением очередной интересной новинки в версии 1.23

Пакет unique упрощает работу с дубликатами. То есть, он позволяет выполнять дедупликацию таким хитрым образом, чтобы все ссылки указывали на единственную, уникальную копию. При этом пакет эффективно управляет этими копиями под капотом.

Возможно, вы уже встречали этот подход под названием Interning.

Автор статьи рассказывает и показывает, как это работает, и почему это полезно.

#go_official #go_1_23
130👍9🤔1