私は、1つのパラメータを定義して、タイプがfunc(interface{}, proto.Message) interface{}
であるインターフェースを持っていて、タイプfunc reduceMsg(a interface{}, b proto.Message) []*PersistentData
を渡そうとしています。これにより、次のコンパイラエラーが発生します。指定された戻り値のサブタイプ(この場合はインタフェース{})を返すにはどうすればよいですか?
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