看看这个片段:package maintype Interface interface { Interface()}type Struct struct { Interface}func main() { var i interface{} = Struct{} _ = i.(Interface)}structStruct有一个嵌入的成员实现接口Interface。当我编译这个片段时,我得到一个错误:panic: interface conversion: main.Struct is not main.Interface: missing method Interface这看起来很奇怪,因为 struct应该从嵌入的接口Struct继承方法。InterfaceInterface我想知道为什么会发生这个错误?它是在 golang 中设计的还是只是 golang 编译器的错误?
1 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
您不能同时拥有同名的字段和方法,当您嵌入X提供方法的命名时会发生这种情况X()。
如所写。Struct{}.Interface是一个领域,而不是一个方法。没有Struct.Interface(),只有Struct.Interface.Interface()。
重命名您的界面。例如,这很好用:
package main
type Foo interface {
Interface()
}
type Struct struct {
Foo
}
func main() {
var i interface{} = Struct{}
_ = i.(Foo)
}
- 1 回答
- 0 关注
- 119 浏览
添加回答
举报
0/150
提交
取消