golang 的Interface 实现,为何不指明实现的哪个接口?

golang 的Interface 实现,为何不指明实现的哪个接口?

type Animal interface {
    Run()
    Eat()
}

实现:

type Dog struct {
    Name string
}

func (d *Dog) Run() {
}

func (d *Dog) Eat() {
}

这里有一个疑问就是,为何golang 不像java一样,实现接口的时候,指明是实现的哪个接口?

阅读 2.4k
2 个回答

可能作者写 Java 写累了, 但又不放心完全抛弃类型, 于是在鸭子类型与标称类型中取个平衡 -> 结构化类型!

官网这里提到:

Go 类型通过实现接口的方法来满足接口,仅此而已。此属性允许在无需修改现有代码的情况下定义和使用接口。它支持一种促进关注点分离和改进代码重用的结构类型,并且更容易在代码开发时出现的模式上进行构建。接口的语义是 Go 灵活、轻量级的主要原因之一。

人家决定那样设计. 这语言设计得也,,,挺清秀的. 不过, 这才哪到哪, 如果你之前是写 Java 的, 慢慢你会发现 Go 作者脑回路清奇, 哈哈哈~

参考:
https://go.dev/doc/faq#implem...
https://studygolang.com/artic...
https://jordanorelli.com/post...

加个就会提示了

var _ Animal = (*Dog)(nil)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题