同一个项目下面。不同目录之间。接口被实现判断的疑问
来源:6-3 接口的定义和实现

qq_白澤_0
2020-05-28
如图,以为这一章第一节简单理解接口创建过retriver。
这里在learn/retriever/main.go再次定义和声明retriver。编辑器会提示有很多实现,甚至是实现了别的接口。
我在想:判断接口被实现到底是根据什么?Get?我尝试改变最开始第一章第一节的Get为Get1。发现确实是这样。
虽然,每次我们实现接口肯定会明确指定是哪个实现。编辑器的提示并不影响代码逻辑。
写回答
1回答
-
这正是Go隐式实现接口的特点,提供了强类型化的编译又同时有了duck typing的能力。的确只要有Get函数(当然参数及返回类型要正确)就叫实现了Retriever接口。
除非使用像idea/goland这样强大的ide,不然:
我写了一个结构,我无法知道它实现了哪些接口
我写了一个接口,我无法知道有哪些实现。正如上述截图中那样,可能会拉出一大堆
但是,给定一个结构S和一个接口I,问这个结构S有没有实现这个接口I,这个回答是一定的,要么有要么没有,判断的方法是看结构S是否有这个接口I定义的所有方法。
1和2两个看似“缺点”但这是Go设计者的取舍,为了能够让Go拥有强类型化的同时拥有duck typing的能力。
至于为什么要为了duck typing而放弃传统OO思想,这就是个很大的课题了,我们需要在项目中积累和体会。
212020-06-01
相似问题