为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
九州编程 2021-10-04 12:54:49
我有一个界面: 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)......或者很多变化。
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您正在寻找;


 type ImplToo struct {

     pkg.Impl

 }


func (it ImplToo) Nifty() bool { return it.Impl.Nifty() }

您对指针的使用不一致,这可能是(不是积极的)问题的一部分。如果你想让嵌入类型成为一个指针,那么让你的方法接收类型也是一个指针以避免这个问题。


如果要显式使用嵌入类型中的方法,请使用通常具有属性名称的类型来引用它。


查看完整回答
反对 回复 2021-10-04
  • 2 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信