类型组成:覆盖接口类型

类型组成:覆盖接口类型,第1张

类型组成:覆盖接口类型

通过

s.PrintViaMethod()
,您正在调用 提升的
方法
FakeService.Service.PrintViaMethod()
方法接收者将是
FakeService.Service
哪种类型
Service
,并
Service.PrintViaMethod()
调用
Service.Client.Print()
何处
Service.Client
是哪种类型
PrinterService
,这就是它打印的原因
"PrinterService"

在Go中有嵌入,但是没有多态性。当您将类型嵌入结构中时,嵌入类型的方法将得到提升,并将成为嵌入类型的方法集的一部分。但是,当调用这种升级方法时,它将获得
嵌入值 作为接收者,而不是 嵌入者

要实现所需的功能,必须

PrintViaMethod()
通过为
FakeService
类型(带有
FakeService
接收者类型)提供其实现,并在其内部调用来“覆盖”该方法
FakeService.Client.Print()

这样做

s.PrintViaMethod()
将表示该
FakeService.PrintViaMethod()
方法,因为该方法将位于
PrintViaMethod()
存在(而不是
FakeService.Service.PrintViaMethod()
)的最浅深度。规格:选择器中对此进行了详细说明。

例如:

func (fs FakeService) PrintViaMethod() {    fs.Client.Print()}

然后输出将是(在Go Playground上尝试):

SomeOtherService


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5639025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存