gob: マップ[文字列]インターフェイスのエンコーディング{}
この記事では、gob を使用して発生する一般的な問題について説明します。 map[string]interface{} データ型をエンコードします。このようなマップをエンコードしようとすると、ユーザーは「gob: type not registered for interface: map[string]interface {}」というエラーに遭遇する可能性があります。
これに対処するために、簡単な解決策を紹介します。
gob.Register(map[string]interface{}{})
map[string]interface{} タイプを gob に登録することで、エンコーダがエンコード プロセス中にこのデータ構造を認識し、適切に処理できるようになります。
これを示す更新されたコード サンプルは次のとおりです。タイプを登録した後、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) enc.Encode(a) b1 := buff.Bytes() dec.Decode(b) return b1 } func main() { var a interface{} a = map[string]interface{}{"X": 1} b2, err := json.Marshal(&a) fmt.Println(string(b2), err) gob.Register(map[string]interface{}{}) var b interface{} b1 := CloneObject(&a, &b) fmt.Println(string(b1)) }
gob タイプの登録により、map[string]interface{} 値のエンコードとデコードが機能します。スムーズに実行され、エラー メッセージ「gob: type not registered for interface: map[string]interface {}」は表示されなくなります。
以上がGob で「map[string]interface{}」をエンコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。