我有一个界面:

 package pkg
 type BaseInterface interface {
     func Nifty() bool
     func Other1()
     func Other2()
     ...
     func Other34123()
 }

和一个实现它的结构:
 package pkg
 type Impl struct {}
 func (Impl) Nifty() bool { ... }

然后是另一个结构,它想要嵌入第一个结构并自己做Nifty():
 package myOtherPackage
 import "pkg"
 type ImplToo struct {
     *pkg.Impl
 }
 func (it ImplToo) Nifty() bool { ... something else ... }

这有点像用OOP语言重写方法的类继承。我想知道如何做与implToo.super()。Nifty()等效的方法-也就是说,从ImplToo Nifty()实现中,调用pkg.Impl Nifty()实现。

可以在it上使用的正确转换是什么,以便我可以完成此转换?我尝试的所有操作都会对ImplToo的Nifty()产生无限制的递归,或者会产生一些编译器错误,例如:
invalid type assertion: (&it).(BaseInterface) (non-interface type *it on left)
...或对此的许多变化。

最佳答案

您正在寻找;

 type ImplToo struct {
     pkg.Impl
 }

func (it ImplToo) Nifty() bool { return it.Impl.Nifty() }

您使用的指针不一致,这可能是问题的一部分(不是肯定的)。如果要使嵌入式类型成为指针,则使您的方法也使接收类型成为指针,以避免出现此问题。

如果要在嵌入式类型中显式使用方法,则可以使用通常具有属性名称的类型来引用该方法。

10-08 04:09