请稍等 ...
×

采纳答案成功!

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

接口开始讲的很晦涩难懂

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回答

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 noblenooble #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-09-25 01:44:33
  • 老师,接口和struct可以重名吧,只要在不同的包里,就像上课例子一样
    回复 有任何疑惑可以回复我~ 2021-07-16 03:37:02
  • ccmouse 回复 lichever #3
    是的,可以重名。而且我们也不会反对重名,因为go语言引用的时候是包名.类型名。
    回复 有任何疑惑可以回复我~ 2021-07-16 15:13:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信