在 Go 语言中,接口(Interface)不仅仅是一个简单的指针,它在底层的运行时(Runtime)表现为两个字(machine words)宽度的结构体。 根据接口是否包含方法,底层实现分为两种结构: 1. (Empty Interface):用于空接口 (即 )。 2. (Interface):用于包含方法的非空接口(例如 )。 这两个结构体定义在 Go 源码的 中。 --- 1. :空接口 (Empty Interface) 当我们在 Go 中使用 或 时,底层使用的是 结构体。因为它不需要调用方法,所以它只需要记录具体的类型和具体的数据。 结构定义 字段解析 : 指向一个 结构体。这个结构体包含了具体类型的所有元信息(如类型名称、大小、对齐方式、哈希值等)。Go 语言的反射(Reflection)就是基于这个字段实现的。 : 一个指针,指向实际存储的值(Concrete Value)。 示例: 此时 的 指向 的类型元数据, 指向存储 的内存地址。 --- 2. :非空接口 (Non-empty Interface) 当接口中定义了方法时(例如 ),底层使用的是 结构体...