tab *itab
data unsafe.Pointer
}
itab - это interface table, и это тоже является отдельной структурой, в которой хранится
дополнительная информация об интерфейсе и базовом типе:
type itab struct{
inter *interfacefacetype
_type *_type
link *itab
bad int32
unused int32
fun [1]uintptr
}
Интерфейс это набор данных о типах (интерфейса и типа переменной внутри него) и указатель на перменную со статическим (конкретным) типом (поле data в iface).
3) Как устроен пустой интерфейс?
Реализован отдельной структурой:
type eface struct{
_type *_type
data unsafe.Pointer
}
Похож на интерфейс, но в ней нет таблицы интерфейса (itab). Т.к. любой статический тип
удовлетворяет пустому интерфейсу.
Спасибо. Т.е. они по разному сделали. И пустой это тупо polymorphic из версии 1989. Спасибо.
Обсуждают сегодня