请稍等 ...
×

采纳答案成功!

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

fmt.Println(session(&retriever)) 和 func session(s RetrieverPoster) string {

老师,请教一下,在接口组合这一章节中有以下两个小片段:
实参:
fmt.Println(session(&retriever))
形参:
func session(s RetrieverPoster) string {

请问:为什么不是*RetrieverPoster? 谢谢!

正在回答

1回答

因为RetrieverPoster是一个接口。接口我们几乎不会作为指针来使用,所以一定是s RetrieverPoster。

但接口的具体实现本身也是一个“结构”,它里面会放一个“值”,这个“值”可能是一个具体的对象的拷贝,也可能是一个指针。这就是我之前“接口的值类型”所要讲述的。

所以,这个形参s,永远都是RetrieverPoster,我不管它是怎么实现的,当然也不管它是不是用一个指针实现的。

那么我们这里实参这边retriever,它的Get方法中,接收者是(*Retriever),是一个指针类型,所以是&retriever实现了RetrieverPoster,而不是retriever。


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信