在 Go 中调用嵌入类型的重载方法的正确方法

我有一个界面:


 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)


......或者很多变化。


九州编程
浏览 225回答 2
2回答

杨__羊羊

您正在寻找; type ImplToo struct {     pkg.Impl }func (it ImplToo) Nifty() bool { return it.Impl.Nifty() }您对指针的使用不一致,这可能是(不是积极的)问题的一部分。如果你想让嵌入类型成为一个指针,那么让你的方法接收类型也是一个指针以避免这个问题。如果要显式使用嵌入类型中的方法,请使用通常具有属性名称的类型来引用它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go