我有一个界面:
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() 上产生无限递归,要么产生一些编译器错误,例如:
无效的类型断言:(&it).(BaseInterface)(非接口(interface)类型 *it 在左边)
... 或它的许多变体。
最佳答案
您正在寻找;
type ImplToo struct {
pkg.Impl
}
func (it ImplToo) Nifty() bool { return it.Impl.Nifty() }
您对指针的使用不一致,这可能是您问题的一部分(不是肯定的)。如果你想让嵌入类型成为指针,那么让你的方法接收类型也成为指针以避免这个问题。
如果您想显式使用嵌入类型中的方法,您可以使用通常具有属性名称的类型来引用它。
关于types - 在 Go 中调用嵌入式类型的重载方法的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29955093/