Новости
Зеро аллокации
Все мы знаем, что пустая структура struct{} в Go действительно занимает ноль байт. Но как это реализовано? Во время выполнения среда не выделяет под нее память, а вместо этого возвращает указатель на глобальную переменную zerobase, поэтому все экземпляры s...
Уровни микроархитектуры amd64
Возможно вы слышали про уровни микроархитектуры. Каждый уровень включает в себя набор расширений набора команд. Тулинг Go предоставляет доступ к настройке уровней через переменную окружения GOAMD64 Наши 64-битные процессоры Intel и AMD совершенствовались на...
Wi-Fi данные
Не знаю зачем вам это может буть нужно, но мне всегда нравятся статьи по работе с сетью. Вот в этой статье про то, как добраться до данных Wi-Fi в macOS Apple удалила утилиту airport в macOS Sonoma 14.4, а ее замена wdutil скрывает BSSID и другие данные ка...
Golang Ревью
Продолжение серии заметок о неочевидных и опасных поведениях Go, дополнение к первой части 2024 года. Автор освещает ряд проблем: - тихие целочисленные переполнения, где тип int зависит от архитектуры, что ведёт к реальным уязвимостям вроде SQL-инъекций ...
Эээксперименты
В Go есть "экспериментальные" возможности, чтобы вы могли опробовать новые функции или изменения в поведении до того, как они будут окончательно зафиксированы. Но знаете ли вы, как их найти и включить или как они переходят в статус общедоступных? Алекс объясня...
Иггдрасиль
В статье про использование Yggdrasil в качестве встраиваемой Go-библиотеки. Yggdrasil это такая экспериментальная оверлей IPv6 mesh-сеть Автор рассказывает о своём форке yggdrasil-go с более модульной архитектурой. И показывает, как запустить два узла в...
Мультиплеер
В статье автор рассказывает про архитектуру управления состоянием своей многопользовательской игры HiddenWars на Go. PostgreSQL выступает единственным источником правды и хранит игроков, узлы, очереди построек, достижения. А Redis используется только для го...
Руководство по миграции с Go на Rust
Подробное руководство по миграции с Go на Rust для бэкенд-сервисов. Автор объясняет, что Go и так достаточно быстр, поэтому главная мотивация для перехода - гарантии корректности. Rust через систему типов устраняет nil-паники, состояния гонки и забытые обр...
Что нового в Go
Go - "скучный" в самом хорошем смысле этого слова: стабильный, надежный и созданный для масштабирования. Из видоса мы узнаем, что нового появилось в Go 1.25 и 1.26. Нам расскажут про сборщик мусора "Green Tea", нативные векторные инструкции и инструменты м...
Дженерик методы
Ура! В Go теперь можно будет объявлять параметризованные методы для типов, которые сами не являются дженериками, а также добавлять к существующим дженерик типам новые дженерик методы
Рейт лимитинг
Автор разбирает три основных алгоритма рейт лимитинга в Go: Token Bucket в библиотеке golang.org/x/time/rate, Leaky Bucket из go.uber.org/ratelimit и Sliding Window его собственной реализаций со слайсом временных меток. Token Bucket подходит для большинств...
Регрессия на 3%
Порция байтоебства на сегодня Автор расследовал регрессию производительности в своём Go-коде. Изменение в файле hash2.go вызвало падение скорости на 3% в совершенно другом, hash2u16.go, хотя его код не менялся. Оказалось, что дело в сдвиге выравнивания инст...
Сборщик мусора
Автор прослеживает эволюцию сборки мусора от оригинального mark-and-sweep из статьи Маккарти 1960 года до современных коллекторов в Java, Go и Python. Он разбирает два фундаментальных подхода: mark-and-sweep и подсчет ссылок. Еще рассказывает про концепцию...
HTTP/2 h2c
Обычно HTTP/2 работает только поверх TLS через HTTPS. Но h2c позволяет использовать все фишки HTTP/2 (мультиплексирование, Server Push, потоковые SSE) по незащищённому соединению, что удобно за балансировщиками или reverse proxy, где TLS уже не нужен В стат...