空接口
概念说明
空接口写作 interface{},它没有声明任何方法。
因为所有类型都至少实现了“零个方法”,所以任意类型都满足空接口。
Go 1.18 之后可以使用 any 表示 interface{}。any 更短,也更能表达“任意类型”的含义。
语法/规则
interface{}可以接收任意类型的值。any是interface{}的类型别名。- 从空接口中取具体值时,通常需要类型断言或
type switch。 - 空接口会削弱类型约束,能不用就不要滥用。
- 常见场景是日志、序列化、通用容器、泛型出现前的通用函数。
空接口接收任意值示例
| |
输出结果:
| |
常见错误
- 把
any当成“不需要类型”的意思,实际运行时仍然要面对具体类型。 - 大量使用空接口让函数签名失去约束,调用方不容易知道应该传什么。
- 忘记断言失败的情况,导致处理空接口时发生 panic。