我有一个界面:
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() }
您使用的指针不一致,这可能是问题的一部分(不是肯定的)。如果要使嵌入式类型成为指针,则使您的方法也使接收类型成为指针,以避免出现此问题。
如果要在嵌入式类型中显式使用方法,则可以使用通常具有属性名称的类型来引用该方法。