接口
隐式实现
Go 的接口是一组方法签名集合。类型无需显式声明实现了某接口,只要方法集满足要求即视为实现,这被称为"鸭子类型"的静态化:
Tip
隐式实现意味着可以为无法修改源码的类型(包括标准库类型)定义接口。建议接口定义在消费方一侧而非实现方一侧,保持接口最小化。
接口组合
小接口可以组合成大接口,这是标准库的常见模式:
类型断言
从接口值中提取具体类型:
类型 switch
对多种类型分支判断时,类型 switch 更简洁:
空接口与 any
空接口 interface{} 不含任何方法,因此所有类型都实现它。Go 1.18 起提供别名 any,语义相同:
Tip
any 只应用于真正"任意类型"的场景(如 JSON 解析、通用容器)。若类型集合有限,优先使用泛型或具体接口,以保留编译期检查。
常见标准库接口
指针接收者与接口
方法集规则需要注意:只有指针类型拥有指针接收者的方法。若方法使用指针接收者,则仅 *T 满足接口,T 不满足:
小结
- 隐式实现使接口定义与使用解耦,接口应保持小而聚焦。
- 类型断言与类型 switch 用于从接口还原具体类型。
- 指针接收者方法仅属于指针类型,赋值给接口时需取地址。