【发布时间】:2015-04-29 21:40:46
【问题描述】:
我有一个界面:
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)
...或许多变体。
【问题讨论】:
-
你试过
it.Impl.Nifty()吗? -
我做到了。问题是我的实际“Impl”实际上被命名为“name.withADot”,所以解析告诉我相当于
(type ImplToo has no field or method name)这似乎让我认为“好的,那么parens”,但它。(name.withADot) .nifty被解析为接口转换,返回non-interface type on left错误。 -
我不明白。标识符不能包含点字符。请发布您的代码。
-
但是类型可以,因为它们是由包名限定的。点既是选择器又是包限定符。我在上面进行了编辑以反映我在说什么。 (而当你嵌入时,/type 名称就是字段名称/。那么如何选择呢?等等)