接口开始讲的很晦涩难懂

来源:6-4 接口的值类型

noblenooble

2019-09-13

1.如果go 是隐式 impl
有个interface里面有个Get方法
type Retriever interface {
Get(url string) string
}

然后有个struct并通过实现Retriever构造进行传值
type Retriever struct {
UserAgent string
TimeOut time.Duration
}

那么问题来了如果有另外一个interface也有Get 方法 同时通过Retriever struct 传值 这会发生什么?
type Retriever2 interface {
Get(url string) string
}
type Retriever3 interface {
Get(url string) string
}

func (r *Retriever) Get(url string) string {
resp, err := http.Get(url)
if err != nil {
panic(err)
}

写回答

1回答

ccmouse

2019-09-21

首先,Retriever接口和Retriever struct重名了,这是不行的。我回答下如果我们有Retriever struct,并且有Retriever2, Retriever3两个接口,会发生什么。

发生的就是Retriever(准确的讲是*Retriever)同时实现了Retriever2, Retriever3两个接口。我们的函数不论是需要Retriever2还是Retriever3,都能够传入*Retriever。

0
3
ccmouse
回复
lichever
是的,可以重名。而且我们也不会反对重名,因为go语言引用的时候是包名.类型名。
2021-07-16
共3条回复

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

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

5995 学习 · 1909 问题

查看课程