接口与隐式实现

类型通过实现一个接口的所有方法来实现该接口。既然无需专门显式声明,也就没有“implements”关键字。

隐式接口从接口的实现中解耦了定义,这样接口的实现可以出现在任何包中,无需提前准备。

因此,也就无需在每一个实现上增加新的接口名称,这样同时也鼓励了明确的接口定义。

interfaces-are-satisfied-implicitly.go

  1. package main
  2. import "fmt"
  3. type I interface {
  4. M()
  5. }
  6. type T struct {
  7. S string
  8. }
  9. // 此方法表示类型 T 实现了接口 I,但我们无需显式声明此事。
  10. func (t T) M() {
  11. fmt.Println(t.S)
  12. }
  13. func main() {
  14. var i I = T{"hello"}
  15. i.M()
  16. }