1. Go 的接口(隐式实现)如何促进小接口(io.Reader 等)组合
请解释 Go 的接口(隐式实现)如何促进小接口(如 io.Reader)组合?
- Go 接口隐式实现
- 小接口哲学
- 接口组合
- Go 接口隐式实现:Go 接口是结构性的,类型只要实现接口的方法即满足接口(无需显式声明 implements)。隐式实现让类型自动满足它能力匹配的接口,无需预先规划。
- 小接口:因为隐式实现,Go 鼓励定义小接口(1-2 个方法),如
io.Reader(Read)、io.Writer(Write)、io.Closer(Close)。小接口表达单一能力,易实现、易组合。 - 接口组合:Go 的接口可以嵌入(embedding)组合成大接口,如
io.ReadWriter = io.Reader + io.Writer。小接口通过组合构成更丰富的能力,满足"接口即最小契约"。 - 收益:隐式实现让类型无需知悉接口,小接口让实现简单、组合灵活,接口组合复用能力。这是 Go 接口设计的核心哲学。
- 结论:Go 隐式实现让类型自动满足接口,因此鼓励小接口并通过嵌入组合,小接口易实现、易组合,接口组合表达复合能力。
Go 接口结构性隐式实现,无继承声明,故倡导小接口(单一能力)并支持嵌入组合。小接口易实现、可组合,构成 Go 接口哲学。