gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:07:01 25 4
gpt4 key购买 nike

我有一个界面:

 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com