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

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

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

Обратная связь: @justskiv
Download Telegram
💻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
unique - новый пакет в стандартной библиотеке Go 1.23

https://go.dev/blog/unique

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

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

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

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

#go_official #go_1_23
Go memory ballast: How I learnt to stop worrying and love the heap

https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap/

Очень крутая статья, в которой разработчики Twitch снова борются с Garbage Collector'ом (GC). В статье есть очень крутой ликбез по GC, про некоторые его основы и нюансы.

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

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

Статья написана очень круто — материал довольно сложный, глубокий, но при этом читается довольно легко и интересно.

————

Краткая суть проблемы из статьи: периодически Твич ловит внезапный рост нагрузки. Например, из-за так называемого refresh storm — это когда крупный стример перезапускает стрим, и все его зрители начинают массово обновлять страницу.

Масштабировать такое сложно, т.к. всё происходит слишком быстро, а держать достаточное количество мощностей, работающих постоянно — дорого.

Ребята решили оптимизировать нагрузку на процессор тем, что снизили частоту срабатывания GC. Как именно? Если кратко, то вот так:

func main() {

// Create a large heap allocation of 10 GiB
ballast := make([]byte, 10<<30)

// Application execution continues
// ...
}


Подробное обоснование, объяснение и результаты найдёте в статье 🙃

Ну ладно, спойлер, вот результаты: снижение количества срабатываний GC на 99% и снижение нагрузки на CPU на 30%

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

#article #english #highload #garbage_collector
Please open Telegram to view this post
VIEW IN TELEGRAM
Мысли про найм Go-разработчиков в 2024 году

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

Честно, статья мне не очень понравилась, слишком сумбурно и очень много субъективных мыслей. И главное — не очень понятна основная мыль, которую пытался донести автор.

Но почитать все равно было интересно, ведь на собеседованиях я сейчас бываю довольно редко, и стало интересно что там сейчас происходит на рынке (спойлер — ровно то же самое, что и лет 5 назад).

В любом случае, автору статьи спасибо за то, что поделился своими мыслями ❤️

А вот дискуссии в комментариях читать оказалось даже интересней, чем саму статью.

————

С удивлением обнаружил, что автор этой статьи также является автором довольно неплохого сайта-тренажера для решения задач по программированию - Code Abbey. Да, на первый взгляд он выглядит неказисто, но задачки довольно неплохие, и подход интересный. Со мной им когда-то давно поделился Глеб Яльчик — на его взгляд, это один из лучших тренажеров для новичков. Не буду тут подробно объяснять почему — если интересно, спросите в комментариях, обсудим.

Расскажите также в комментариях про свой опыт собеседований по Go в последнее время, только не забывайте уточнять грейд.
Please open Telegram to view this post
VIEW IN TELEGRAM