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

标签 types go embedding

我有一个界面:

 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/

相关文章:

objective-c - 如何获取类簇中 "top"类的名称?

mongodb - 使用 gopkg.in/mgo.v2 作为字符串在 golang 中自定义 mongodb 命令

go - 是否有用于制作任意 map 副本的内置函数?

distance - 在 TensorFlow 嵌入中有效查找最接近的单词

python - 如何将 Python 嵌入到多平台 C++ 框架(JUCE)中?

python - 能否在 Bash 脚本或 Python 脚本中嵌入可由外部程序调用的 TCL 脚本?

haskell - 使用 GHC 泛型时参数类型错误

haskell - 将类型类约束应用于另一个类型类的内部类型

C#。有可能有一个带有基类型约束的静态泛型类,它有一个带有进一步基类型约束的方法

go - 无法从 $GOROOT 和 $GOPATH 中找到包