跳到主要内容

go的鸭子模型

duck typing, 鸭子模型,像鸭子一样游泳,像鸭子一样叫,那它就可以看作鸭子。

Go 语言没有显式的 implements 关键字。只要一个类型实现了接口要求的所有方法,它就自动满足这个接口。

一、接口示例

type Writer interface {
Write(p []byte) (n int, err error)
}

任何类型只要实现了 Write 方法,就可以被当作 Writer 使用。

二、优势

  • 降低类型之间的耦合;
  • 接口更小、更灵活;
  • 便于测试和替换实现;
  • 适合面向能力建模。

三、设计建议

  • 接口尽量小;
  • 接口由使用方定义;
  • 不要为了抽象而抽象;
  • 优先描述行为,而不是描述对象。