Статья о том, как устроен пакет reflect в Go. Он, кстати, не вычисляет как-то хитро информацию о типах в рантайме - он просто читает статические дескрипторы, которые компилятор встроил в исполняемый файл на этапе сборки.
Каждый тип, подпадающий под интерфейс, получает свой дескриптор в read-only секции бинарника. Там хранятся размер, выравнивание, GC-битмаска, имена полей, теги и смещения - все, что нужно для рефлексии. Методы TypeOf и ValueOf сводятся к одному чтению указателя из заголовка any, который внутри представляет собой два указателя - на дескриптор типа и на сами данные. А обход полей структуры - это просто приведение дескриптора к нужной структуре и индексация по массиву полей.
Никаких таблиц поиска, хеш-мапов или аллокаций - только арифметика указателей по заранее подготовленным компилятором байтам
23.06.2026
Похожее
22.06.2026
Зеро аллокации
Все мы знаем, что пустая структура struct{} в Go действительно занимает ноль бай...
16.06.2026
Уровни микроархитектуры amd64
Возможно вы слышали про уровни микроархитектуры. Каждый уровень включает в себя ...
15.06.2026
Wi-Fi данные
Не знаю зачем вам это может буть нужно, но мне всегда нравятся статьи по работе ...
13.06.2026
Golang Ревью
Продолжение серии заметок о неочевидных и опасных поведениях Go, дополнение к пе...