采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
如图,以为这一章第一节简单理解接口创建过retriver。
这里在learn/retriever/main.go再次定义和声明retriver。编辑器会提示有很多实现,甚至是实现了别的接口。
我在想:判断接口被实现到底是根据什么?Get?我尝试改变最开始第一章第一节的Get为Get1。发现确实是这样。
虽然,每次我们实现接口肯定会明确指定是哪个实现。编辑器的提示并不影响代码逻辑。
这正是Go隐式实现接口的特点,提供了强类型化的编译又同时有了duck typing的能力。的确只要有Get函数(当然参数及返回类型要正确)就叫实现了Retriever接口。
除非使用像idea/goland这样强大的ide,不然:
我写了一个结构,我无法知道它实现了哪些接口
我写了一个接口,我无法知道有哪些实现。正如上述截图中那样,可能会拉出一大堆
但是,给定一个结构S和一个接口I,问这个结构S有没有实现这个接口I,这个回答是一定的,要么有要么没有,判断的方法是看结构S是否有这个接口I定义的所有方法。
1和2两个看似“缺点”但这是Go设计者的取舍,为了能够让Go拥有强类型化的同时拥有duck typing的能力。
至于为什么要为了duck typing而放弃传统OO思想,这就是个很大的课题了,我们需要在项目中积累和体会。
感谢老师解答
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
4.3k 14
1.3k 1
2.6k 1
1.6k 12
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号