Go interface底层数据结构

367 阅读1分钟
// 空结构体
type eface struct {   // 16 字节
	_type *_type
	data  unsafe.Pointer
}

// 带有方法的结构体
type iface struct {   // 16 字节
	tab  *itab
	data unsafe.Pointer
}

Go 语言使用 runtime.iface 表示第一种接口,使用 runtime.eface表示第二种不包含任何方法的接口 interface{},两种接口虽然都使用 interface 声明,但是由于后者在 Go 语言中很常见,所以在实现时使用了特殊的类型。

所以在传递interface时, 传递的是上面两种结构体的一种, 都是16字节.