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

来源:6-3 接口的定义和实现

qq_白澤_0

2020-05-28

http://img.mukewang.com/szimg/5ecf2ad409f3433e06240183.jpg

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

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

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

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

写回答

1回答

ccmouse

2020-05-31

这正是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
1
qq_白澤_0
感谢老师解答
2020-06-01
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程