Golang 的 Interface

接口是方法签名的集合,任何类型的方法集中只要拥有与之对应的全部方法,即表示其实现了此接口

对应的意思:

  1. 有相同名称、参数列表(不包括参数名)以及返回值

特点

  1. 习惯以 er 结尾的结构体
  2. 只有方法签名,没有实现
  3. 没有数据字段
  4. 可嵌入其接口
  5. 类型可以实现多个接口

空接口(interface{})没有任何方法签名,即:所有类型都实现了此接口

接口结构

Itab 结构体,保存元数据信息,包括接口类型、动态类型、以及实现接口的方法指针

数据指针持有的是目标对象的只读复制品,复制完整对象或指针

接口转型返回临时对象,只有使用指针才能修改其状态

根据interface的结构,只有在 tab = nil 与 data = nil 时,接口才等于 nil

var a interface{} = nil // tab = nil , data = nil
var b interface{} = (*int)(nil) // tab 包含(*int)类型信息,data=nil