我有一个接口,它定义了一个参数,其类型为func(interface{}, proto.Message) interface{}
,我试图将类型func reduceMsg(a interface{}, b proto.Message) []*PersistentData
传递给它。这会导致以下编译器错误:如何返回指定返回值的子类型(在本例中为interface {})?
Cannot use reduceMsg (type func(a interface{}, b proto.Message) []*PersistentData as type func(interface{}, proto.Message) interface{}
这个错误的原因是什么?我该如何解决它?看起来像返回一个比interface{}
更具体的类型应该是合法的。下面是一个说明问题的简单完整示例:
package main
import "fmt"
func main() {
var t func() interface{} = func() []string { return []string{} }
fmt.Println(t)
}
https://golang.org/doc/faq#covariant_types – JimB
这似乎是一种语言中的缺陷。特别是鉴于以下内容完全合法:'var t interface {} = [] string {}'。 – jonderry
您的示例与解释的问题实际上没有关系:可分配性规则(您的示例代码)和接口实现规则(您的实际问题)是不同的。 – zerkms