Внутреннее устройство интерфейсов?

Middle+
1.8k просмотров
AFK Offer AI

Интерфейс — это пара указателей: (type, value). Пустой интерфейс any — это eface{_type, data}. Непустой интерфейс — iface{tab, data}, где tab (itable) содержит информацию о типе и таблицу методов.

Метод вызывается через vtable — один уровень indirection. Интерфейс == nil только когда оба поля nil. Частая ловушка:

var p *MyStruct = nil
var i error = p
// i != nil, потому что type != nil

Размер интерфейса — 16 байт (два указателя). Присвоение конкретного типа интерфейсу может вызвать аллокацию на хипе.

Следующий вопрос

Что такое panic и recover?