通过
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)