Новости

Post Thumbnail

Джину уже 12 лет

Ману Мартинес-Алмейда рассказывает историю как он создавал Gin - одного из самых популярных веб-фреймворков для Go, который вырос из его несостоявшегося стартапа Fyve и разрабатывался по принципу "простое важнее легкого". Вдохновившись выступлением Роба Па...

Post Thumbnail

zero-copy-оптимизации

Разбор zero-copy-оптимизаций в Go. Когда вы передаете `*os.File` напрямую `в io.Copy(conn, f)`, рантайм распознает это через цепочку type-assertions и вызывает `sendfile(2)`, передавая данные из кеша странички в сокет без копирования в юзерспейсе. Но вот к...

Post Thumbnail

WAL-RUS

ClickHouse Cloud переписали утилиту для бэкапов и WAL-архивирования Postgres с Go на Rust. В результате появился WAL-RUS - опенсорсный инструмент, у которого пиковое потребление виртуальной памяти более чем на 70% ниже, чем у WAL-G. Это достигнуто за счет прям...

Post Thumbnail

Профилирование

Статья разбирает пять встроенных профилировщиков в Go (CPU, heap, block, mutex и goroutine), показывая, что все они собирают данные в единый pprof-формат, но отличаются способом записи. CPU-профайлер работает асинхронно через сигналы ОС и кольцевой буфер. Heap...

Post Thumbnail

6 популярных кешей

Автор сравнивает шесть подходов к реализации потокобезопасного in-memory кеша в Go. От наивного map без блокировок до copy-on-write через atomic.Pointer и все это на своем на 20-ядерном i7-14700K под разными нагрузками - read-only, read-heavy, write-heavy. ...

Post Thumbnail

Детектор утечек горутин

В Go 1.27 в runtime/pprof добавляется встроенный детектор утечек горутин, принятый из предложения Uber. В отличие от uber-go/goleak, который работает только в тестах и дает ложные срабатывания на живом сервере, новый профиль goroutineleak через сборщик мусо...

Post Thumbnail

Мидделвари лимитеров

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

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 подходит для большинств...