は、このプログラムは次のエラーでコンパイルに失敗し関数は、関数型の正確な署名を満たす必要がありますか?
package main
import (
"io"
"encoding/json"
"os"
)
type MyEncoder interface {
Encode(v interface{}) error
}
type MyEncoderCreator func(io.Writer) *MyEncoder
type MyContainer struct {
Creator MyEncoderCreator
}
func main() {
container := Container{
Creator:json.NewEncoder,
}
encoder := container.Creator(os.Stdout)
encoder.Encode(map[string]string{"key":"value"})
}
次のような単純な囲碁プログラムを考えてみましょう:
./main.go:21: cannot use json.NewEncoder (type func(io.Writer) *json.Encoder) as type MyEncoderCreator in field value
これはなぜでしょうか? json.Encoder
構造体には、MyEncoder
インターフェイスを満たすレシーバがあります。したがってjson.NewEncoder
機能をMyContainer.Creator
に割り当てることができますか?