Go 接口

Go 接口用方法集合描述能力边界,并通过隐式实现实现解耦,这是 Go 抽象体系的核心支点之一。

#type / concept #status / growing #tech / dev #resource / go

[!info] related notes

Go 接口

一句话定义

Go 接口是一组方法签名的集合,用来表达“某个类型具备什么能力”,而不是“某个类型属于哪个类层级”。

核心机制 / 工作原理

Go 接口的几个关键点:

  • 接口只描述行为,不保存实现
  • 类型不需要显式声明“implements”
  • 只要方法集满足接口要求,就算实现了该接口

这套机制的价值很大:

  • 降低实现和抽象之间的耦合
  • 让调用方按能力编程,而不是按具体类型编程
  • 更容易写出可测试、可替换的代码

最小例子 / 最小场景

type Reader interface {
    Read(p []byte) (n int, err error)
}

只要某个类型定义了这个方法,它就满足 Reader

这意味着:

  • 接口常常放在使用方一侧定义
  • 小接口往往比大而全接口更稳定

Go 风格里的接口心智

  • 接口更像“能力契约”
  • 好接口通常小而精
  • 不要为了“显得抽象”而一上来就到处造接口

边界与易混淆点

  • 接口值本身也有运行时语义,不只是编译期占位符
  • nil 接口和值为 nil 的具体类型装进接口后,行为可能不同
  • 方法集受值接收者和指针接收者影响
创建于 2026/6/20 更新于 2026/6/20