Новости

Post Thumbnail

Рефлексия

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

Post Thumbnail

Зеро аллокации

Все мы знаем, что пустая структура struct{} в Go действительно занимает ноль байт. Но как это реализовано? Во время выполнения среда не выделяет под нее память, а вместо этого возвращает указатель на глобальную переменную zerobase, поэтому все экземпляры s...

Post Thumbnail

Уровни микроархитектуры amd64

Возможно вы слышали про уровни микроархитектуры. Каждый уровень включает в себя набор расширений набора команд. Тулинг Go предоставляет доступ к настройке уровней через переменную окружения GOAMD64 Наши 64-битные процессоры Intel и AMD совершенствовались на...

Post Thumbnail

Wi-Fi данные

Не знаю зачем вам это может буть нужно, но мне всегда нравятся статьи по работе с сетью. Вот в этой статье про то, как добраться до данных Wi-Fi в macOS Apple удалила утилиту airport в macOS Sonoma 14.4, а ее замена wdutil скрывает BSSID и другие данные ка...

Post Thumbnail

Golang Ревью

Продолжение серии заметок о неочевидных и опасных поведениях Go, дополнение к первой части 2024 года. Автор освещает ряд проблем: - тихие целочисленные переполнения, где тип int зависит от архитектуры, что ведёт к реальным уязвимостям вроде SQL-инъекций ...

Post Thumbnail

Эээксперименты

В Go есть "экспериментальные" возможности, чтобы вы могли опробовать новые функции или изменения в поведении до того, как они будут окончательно зафиксированы. Но знаете ли вы, как их найти и включить или как они переходят в статус общедоступных? Алекс объясня...

Post Thumbnail

TigerFS

Файловая система — это просто API. А TigerFS — это файловая система, работающая поверх PostgreSQL. Файлы становятся строками в БД, директории — таблицами, а YAML-фронтматер — колонками. Поддерживается два режима. В "file-first" монтируешь БД и работаешь с о...

Post Thumbnail

Иггдрасиль

В статье про использование Yggdrasil в качестве встраиваемой Go-библиотеки. Yggdrasil это такая экспериментальная оверлей IPv6 mesh-сеть Автор рассказывает о своём форке yggdrasil-go с более модульной архитектурой. И показывает, как запустить два узла в...

Post Thumbnail

Мультиплеер

В статье автор рассказывает про архитектуру управления состоянием своей многопользовательской игры HiddenWars на Go. PostgreSQL выступает единственным источником правды и хранит игроков, узлы, очереди построек, достижения. А Redis используется только для го...

Post Thumbnail

httptrace

Пакет net/http/httptrace из стандартной библиотеки Go позволяет отслеживать внутренние фазы HTTP-запроса: DNS-резолвинг, TCP-подключение, TLS-хендшейк, время до первого байта. Все это через ClientTrace, прикрепляемый к context.Context. Автор показывает, ка...

Post Thumbnail

Руководство по миграции с Go на Rust

Подробное руководство по миграции с Go на Rust для бэкенд-сервисов. Автор объясняет, что Go и так достаточно быстр, поэтому главная мотивация для перехода - гарантии корректности. Rust через систему типов устраняет nil-паники, состояния гонки и забытые обр...

Post Thumbnail

Что нового в Go

Go - "скучный" в самом хорошем смысле этого слова: стабильный, надежный и созданный для масштабирования. Из видоса мы узнаем, что нового появилось в Go 1.25 и 1.26. Нам расскажут про сборщик мусора "Green Tea", нативные векторные инструкции и инструменты м...

Post Thumbnail

Дженерик методы

Ура! В Go теперь можно будет объявлять параметризованные методы для типов, которые сами не являются дженериками, а также добавлять к существующим дженерик типам новые дженерик методы

Post Thumbnail

Рейт лимитинг

Автор разбирает три основных алгоритма рейт лимитинга в Go: Token Bucket в библиотеке golang.org/x/time/rate, Leaky Bucket из go.uber.org/ratelimit и Sliding Window его собственной реализаций со слайсом временных меток. Token Bucket подходит для большинств...

Post Thumbnail

Регрессия на 3%

Порция байтоебства на сегодня Автор расследовал регрессию производительности в своём Go-коде. Изменение в файле hash2.go вызвало падение скорости на 3% в совершенно другом, hash2u16.go, хотя его код не менялся. Оказалось, что дело в сдвиге выравнивания инст...

Post Thumbnail

Сборщик мусора

Автор прослеживает эволюцию сборки мусора от оригинального mark-and-sweep из статьи Маккарти 1960 года до современных коллекторов в Java, Go и Python. Он разбирает два фундаментальных подхода: mark-and-sweep и подсчет ссылок. Еще рассказывает про концепцию...

Post Thumbnail

Select

Автор разбирает устройство select в Go как совместную работу компилятора и рантайма. Компилятор переписывает пустые, одиночные и одноканальные с default в простые операции, минуя selectgo. Для общего случая компилятор подготавливает массив кейсов и передае...

Post Thumbnail

HTTP/2 h2c

Обычно HTTP/2 работает только поверх TLS через HTTPS. Но h2c позволяет использовать все фишки HTTP/2 (мультиплексирование, Server Push, потоковые SSE) по незащищённому соединению, что удобно за балансировщиками или reverse proxy, где TLS уже не нужен В стат...

Post Thumbnail

let-go

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

Post Thumbnail

Язык rye

Rye - это такой небольшой встраиваемый язык, который удобно использовать для конфигов В статье на примере встраивания Rye в Go-приложение показан подход whitelist-based конфигурации. Настройка Rye начинается с минимальной базы - в конфиге доступны тольк...

Post Thumbnail

Врап

Автор предлагает паттерн для Go-сервисов: вынести обвязку и все связанное с декодированием, валидацией, приведеним типов, кодированием из каждого хендлера в один обобщённый адаптер Wrap[In, Out] на транспорт. Сервисная функция остается чистой - func(ctx, I...