我有一個(gè)界面: package pkg type BaseInterface interface { func Nifty() bool func Other1() func Other2() ... func Other34123() }和一個(gè)實(shí)現(xiàn)它的結(jié)構(gòu): package pkg type Impl struct {} func (Impl) Nifty() bool { ... }然后是另一個(gè)結(jié)構(gòu),它想要嵌入第一個(gè)并執(zhí)行它自己的 Nifty(): package myOtherPackage import "pkg" type ImplToo struct { *pkg.Impl } func (it ImplToo) Nifty() bool { ... something else ... }這有點(diǎn)像在 OOP 語(yǔ)言中具有方法覆蓋的類繼承。我想知道如何做 implToo.super().Nifty() 的等價(jià)物——也就是說,從 ImplToo Nifty() 實(shí)現(xiàn)中,調(diào)用 pkg.Impl Nifty() 實(shí)現(xiàn)。什么是正確的轉(zhuǎn)換,it以便我可以做到這一點(diǎn)?我嘗試的一切都會(huì)在 ImplToo 的 Nifty() 上產(chǎn)生無(wú)限遞歸,或者一些編譯器錯(cuò)誤,例如:invalid type assertion: (&it).(BaseInterface) (non-interface type *it on left)......或者很多變化。
2 回答

楊__羊羊
TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
您正在尋找;
type ImplToo struct {
pkg.Impl
}
func (it ImplToo) Nifty() bool { return it.Impl.Nifty() }
您對(duì)指針的使用不一致,這可能是(不是積極的)問題的一部分。如果你想讓嵌入類型成為一個(gè)指針,那么讓你的方法接收類型也是一個(gè)指針以避免這個(gè)問題。
如果要顯式使用嵌入類型中的方法,請(qǐng)使用通常具有屬性名稱的類型來(lái)引用它。
- 2 回答
- 0 關(guān)注
- 242 瀏覽
添加回答
舉報(bào)
0/150
提交
取消