假设我设置了两个Go接口并按如下方式实现它们:
type fooInterface interface {
buildBar() barInterface
}
type barInterface interface {
stuff()
}
type fooStruct struct{}
type barStruct struct{}
func (*fooStruct) buildBar() *barStruct {
return &barStruct{}
}
func (*barStruct) stuff() {}
一旦我尝试将fooStruct
分配给fooInterface
变量,我就会收到以下错误:
cannot use fooStruct literal (type *fooStruct) as type fooInterface in assignment:
*fooStruct does not implement fooInterface (wrong type for buildBar method)
have buildBar() *barStruct
want buildBar() barInterface
当然,我可以修改buildBar()
中的fooStruct
以返回barInterface
,它会起作用。但是,我很好奇为什么Go在这种情况下没有注意到*barStruct
遵守barInterface
,特别是因为这可以在像Java这样的语言中工作(可能因为Java接口是明确实现的)。
答案 0 :(得分:2)