Post Thumbnail

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

Каждый тип, подпадающий под интерфейс, получает свой дескриптор в read-only секции бинарника. Там хранятся размер, выравнивание, GC-битмаска, имена полей, теги и смещения - все, что нужно для рефлексии. Методы TypeOf и ValueOf сводятся к одному чтению указателя из заголовка any, который внутри представляет собой два указателя - на дескриптор типа и на сами данные. А обход полей структуры - это просто приведение дескриптора к нужной структуре и индексация по массиву полей.

Никаких таблиц поиска, хеш-мапов или аллокаций - только арифметика указателей по заранее подготовленным компилятором байтам

Похожее

Post Thumbnail

SIMD в go

Будущее пришло быстрее, чем ожидалось: в go1.27rc2 пакет simd стал портируемым, ...

Post Thumbnail

Swiss Tables

Статья подробно разбирает переход Go 1.24 от классической bucket-архитектуры мап...

Post Thumbnail

Кодим чат

Автор просто час пишет чат. Никаких слов, никакого хайпа. Просто час кодинга под...