请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

同一个项目下面。不同目录之间。接口被实现判断的疑问

https://img1.sycdn.imooc.com//szimg/5ecf2ad409f3433e06240183.jpg

如图,以为这一章第一节简单理解接口创建过retriver。

这里在learn/retriever/main.go再次定义和声明retriver。编辑器会提示有很多实现,甚至是实现了别的接口。

我在想:判断接口被实现到底是根据什么?Get?我尝试改变最开始第一章第一节的Get为Get1。发现确实是这样。

虽然,每次我们实现接口肯定会明确指定是哪个实现。编辑器的提示并不影响代码逻辑。

正在回答

1回答

这正是Go隐式实现接口的特点,提供了强类型化的编译又同时有了duck typing的能力。的确只要有Get函数(当然参数及返回类型要正确)就叫实现了Retriever接口。

除非使用像idea/goland这样强大的ide,不然:

  1. 我写了一个结构,我无法知道它实现了哪些接口

  2. 我写了一个接口,我无法知道有哪些实现。正如上述截图中那样,可能会拉出一大堆

  3. 但是,给定一个结构S和一个接口I,问这个结构S有没有实现这个接口I,这个回答是一定的,要么有要么没有,判断的方法是看结构S是否有这个接口I定义的所有方法。

1和2两个看似“缺点”但这是Go设计者的取舍,为了能够让Go拥有强类型化的同时拥有duck typing的能力。

至于为什么要为了duck typing而放弃传统OO思想,这就是个很大的课题了,我们需要在项目中积累和体会。

2 回复 有任何疑惑可以回复我~
  • 提问者 qq_白澤_0 #1
    感谢老师解答
    回复 有任何疑惑可以回复我~ 2020-06-01 09:52:28
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号