エラー: "gob: インターフェイスにタイプが登録されていません: map[string]interface {}"
Go では、gob パッケージは以下を提供します値をバイナリ表現にエンコードおよびデコードするためのサポート。ただし、gob を使用して map[string]interface{} 値をエンコードしようとすると、次のエラーが発生する可能性があります。
gob: type not registered for interface: map[string]interface {}
このエラーは、gob パッケージが type map[string] を認識していないことを示します。インタフェース{}。この問題を解決するには、gob.Register 関数を使用して型を明示的に登録する必要があります。
gob.Register(map[string]interface{}{})
型を登録することにより、gob パッケージに、map[string]interface{ を認識して処理する必要があることを通知します。
これは、必要な要素を含む、提供されたコードの修正バージョンです。登録:
package main import ( "bytes" "encoding/gob" "encoding/json" "fmt" "log" ) func CloneObject(a, b interface{}) []byte { buff := new(bytes.Buffer) enc := gob.NewEncoder(buff) dec := gob.NewDecoder(buff) // Register the map[string]interface{} type for encoding gob.Register(map[string]interface{}{}) err := enc.Encode(a) if err != nil { log.Panic("e1: ", err) } b1 := buff.Bytes() err = dec.Decode(b) if err != nil { log.Panic("e2: ", err) } return b1 } func main() { var a interface{} a = map[string]interface{}{"X": 1} b2, err := json.Marshal(&a) fmt.Println(string(b2), err) var b interface{} b1 := CloneObject(&a, &b) fmt.Println(string(b1)) }
タイプを登録した後、gob を使用して、map[string]interface{} 値を正常にエンコードおよびデコードできます。
以上がGo で「gob: type not registered forinterface:map[string]interface {}」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。