Golang Дайджест
Open in Telegram
Самое интересное из мира Go: новости, статьи, проекты, сервисы, изменения в языке и др. Посты публикуются не часто - только самое важное, с чем я лично ознакомился. Поэтому можно не мьютить канал =) Обратная связь: @justskiv
Show more5 678
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
5 678
Красивое решение для борьбы с ботами на серверах
Ещё один интересный пост от Daily Geek News:
https://t.me/daily_geek_news/230
Речь про endlessh-go
- решение для защиты серверов, работающих с SSH. На самом деле, это просто реализация Endlessh на Go с добавлением метрик и дашборда в Графане.
Для тех, кто не очень понимает автора оригинально поста, давайте разберемся о чем речь:
- Тарпит (Tar pit) - технология безопасности, предназначенная для замедления атакующего, путем увеличения времени ответа сервера. Это заставляет сканирующие боты или атакующие инструменты тратить гораздо больше времени на попытку подключения к серверу, что затрудняет атаку. Вот более подробная статья на эту тему.
- Ханипот (Honeypot) - система безопасности, представляющая собой ложную цель для атакующих. Она преднамеренно содержит уязвимости для привлечения хакеров, позволяя администраторам отслеживать попытки несанкционированного доступа и анализировать методы атаки.
Хорошую статью на эту тему на нашел. Если знаете, делитесь в комментариях, а пока вот такая (не читал, не ручаюсь что хорошая)
- Экспортирование данных в Графану позволяет наглядно отслеживать активность вокруг сервера SSH, строить на этом какую-то аналитку
#project #cybersecurity
5 678
Как начать разрабатывать игры на Go
https://www.quasilyte.dev/ebiten/ru/
Искандер написал подробный гайд для людей, которые делают свои первые шаги в геймдеве на Go:
- Развенчание популярных мифов
- Про Ebitengine
- Ресурсы для обучения
- Важные библиотеки
и др.
От автора:
Тебе хочется создавать игры на Go? Ebitengine - отличный вариант. Этот документ был создан чтобы упростить твоё путешествие. ... tl;dr: Go - подходящий язык, Ebitengine - неплохой игровой движок, сообщество - живое и расширяется#guide #gamedev #quasilyte
5 678
Сторисы выкладывать тут не буду, но если хотите гоферов в реакты под постами, вы знаете за кого голосовать 💻
https://t.me/boost/golang_digest
Можно в полдень 😉
5 678
Пишем 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
5 678
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
5 678
Repost 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.
Полный список изменений как всегда тут.5 678
Go Tour на стероидах от ArdanLabs
https://www.ardanlabs.com/blog/2024/01/ultimate-go-tour.html
William Kennedy, известный нам по крутым гайдам по внутренностям Go, решил, что официальный Go Tour недостаточно хорош, и предлагает нам свою версию.
Что не нравилось:
- Официальный Тур не является всеобъемлющим как по количеству примеров, так и по содержанию, объясняющему эти примеры
- Содержание практически мгновенно переходит от новичка к эксперту
Вильям поколдовал и получилось это: tour.ardanlans.com
Лучше оно или хуже - решать вам. Но оно точно стоит внимания.
Возможно, один из самых крутых аспектов этого нового тура заключается в том, что он не контролируется Google. Это дает проекту гибкость, позволяющую вовлечь в него сообщество.
#ardanlabs #go_tour
5 678
Как устроена память в Go
https://habr.com/ru/companies/vk/articles/776766/
На мой взгляд, устройство памяти - это очень важная тема для тех, кто хочет лучше разбираться, как Go устроен под капотом. Сама статья читается легко и интересно, мне понравилось.
#article #memory
5 678
Открытое собеседование Senior Go разработчика
https://youtu.be/GD0iHLucYdU
Самые популярные интервьюеры русскоязычного Go сообщества - Даниил Подольский (Yadro) и Владимир Балун (Yandex) провели собеседование сеньора на канале Николая Тузова.
Собеседование состоит из двух частей - общие вопросы по знаменитому опроснику Даниила и лайв-кодинг с Владимиром.
В роли кандидата выступил Антон Зиновьев - разработчик и техлид из компании Gaijin.
#собеседование
5 678
Пять новых вакансий в Авито:
- Бэкенд-инженер в команду (Маркетплейс)
- Тимлид разработки в команду электроники
- Бэкенд-разработчик в команду инфраструктуры
- Бэкенд-разработчик в команду Cloud
- С++-разработчик в команду инфраструктуры поиска
Вилка для разработчиков: 300-500к
Для тимлида: от 500к
В описании каждой вакансии рассказано про вашу будущую команду, и чем вы будете заниматься.
Бенефиты:
– Прозрачная система премий;
– Удалённая работа, но есть и классный офис в Москве, в 2-х минутах от метро «Белорусская»;
– ДМС со стоматологией с первого дня;
– Любая необходимая техника, вплоть до мониторов;
– Обучение за счёт компании.
#вакансии
5 678
Исследование 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
5 678
gRPC сервис авторизации: огромный гайд
Гайд доступен в двух вариантах:
- Видео на YuuTube
- Статья на Хабре
Сервис пишется с нуля, попутно затрагивается множество аспектов:
- Правильная архитектура проекта
- Как писать ProtoBuf контракты, генерировать по ним код
- Как полноценно тестировать свой сервис, написание функциональных тестов
- Как правильно работать с паролями и токенами авторизации
- Взаимодействие между сервисами
- Работа с миграциями
5 678
Подводные камни Go
Расскажите, какие наиболее значимые и популярные подводные камни и грабли Go вы знаете? Если есть истории реальных фэйлов, связанных с этим, будет ещё лучше.
"nil error value", передача слайса по значению и т.п. Пусть даже самые банальные и общеизвестные.
Если соберём хорошую подборку, я готов сделать полноценный ролик на эту тему на своём канале.
5 678
Почему `nil error value` не равно nil?
Судя по результатам опроса выше, не все понимают эту механику.
Вот официальный ответ разработчиков на этот вопрос.
Также хорошее объяснение с более сложным примером вы найдёте в книге "Язык программирования Go" Донован А. Керниган Б. (стр. 224 - глава 7, Интерфейсы)
5 678
В Авито появились 5 вакансий:
- Go-разработчик в команду внутренних проектов (Legal Tech)
- Бэкенд-разработчик в команду инфраструктуры
- Бэкенд-разработчик в команду Core Services (Bricks)
- Бэкенд-разработчик в команду услуг продвижения и CPA
- Бэкенд-разработчик в команду монетизации сделок
В описании каждой из них рассказано про вашу будущуу команду и чем вы будете заниматься.
Зарплатная вилка: 204-484к
Бенефиты:
– Прозрачная система премий;
– Удалённая работа, но есть и классный офис в Москве, в 2-х минутах от метро «Белорусская»;
– ДМС со стоматологией с первого дня;
– Любая необходимая техника, вплоть до мониторов;
– Обучение за счёт компании.
#вакансии
5 678
Здоровая конкуренция в GO
https://habr.com/ru/companies/timeweb/articles/770912/
Очень хорошая статья, в которой простым языком на простеньких примерах рассказываются основы работы с параллельным кодом:
- Зачем это нужно
- Какие издержки распараллеливания мы имеет (спойлер - код становится намного сложнее и опасней)
- Как и почему нельзя писать параллельный код
и др.
Если вы не ещё сталкивались с подобными задачами, рекомендую ознакомиться.
#article #concurrency
5 678
GPT бот для работы с документацией Go
https://eli.thegreenplace.net/2023/retrieval-augmented-generation-in-go/
Как быть, если вы хотите спросить у GPT бота что-то по свежей документации Go, но его базы сильно устарели?
- You: what is the latest released version of the Go programming language? - ChatGPT: As of my last update in April 2023, the latest stable version of Go was 1.20. - You: ...👌Проблему можно решить с помощью Retrieval Augmented Generation (RAG), и Eli Bendersky в этой статье рассказывает как это делается. Ну и вкратце рассказывает, что такое RAG. Если интересен только код, вот репозиторий этого проекта. Пример ответа бота про вопрос о GOTOOLCHAIN (переменная окружения, которая появилась в Go 1.21):
In Go, `GOTOOLCHAIN` is an environment variable that determines which Go toolchain version should be used. The value of `GOTOOLCHAIN` can be set to various options: 1. `local`: This indicates that the bundled Go toolchain should be used. 2. `<name>`: This specifies a specific Go toolchain version that should be used. If a binary with that name is found in the system PATH, it will be used; otherwise, the `go` command will download and use the specified Go toolchain. 3. `<name>+auto` or `<name>+path`: This tells the `go` command to select and run a newer Go version as needed. It will consult the `toolchain` and `go` lines in the current workspace's `go.work` file (or the main module's `go.mod` file if there is no workspace) to determine which toolchain version to use. If a newer version is specified in those files, it will be used; otherwise, it will fallback to the default Go toolchain. Overall, `GOTOOLCHAIN` is used to specify the specific Go toolchain version or the selection process of a newer Go version that should be used by the `go` command.#GPT #article #english
5 678
Разбор вопросов с Go собеседований
В канале вы найдете :
📃 Разбор кода
📚 Алгоритмы
👨💻 Архитектуру
🛠 Реальные кейсы
А еще мы собрали папку ресурсов э Go разработчика: https://t.me/addlist/dv7Aubz9_jRjMTky
Подписывайтесь, здесь кладезь полезной информаци: @golang_interview
#партнерский_пост
