Go では、データ構造のエンコードとデコードに gob パッケージが広く使用されています。ただし、文字列キーとインターフェイス値を使用してマップをエンコードしようとすると、「gob: type not registered for interface:map[string]interface {}」のようなエラーが発生する場合があります。
この問題を解決するには、map[string]interface{} タイプを gob パッケージに登録する必要があります。これにより、gob はこのデータ構造を認識して処理できるようになります。
map[string]interface{} タイプを登録するには、 gob.Register 関数を使用します:
gob.Register(map[string]interface{}{})
この行は、gob が使用できる既知のタイプのリストに、map[string]interface{} タイプを追加します。 handle.
次のコード スニペットを考えてみましょう:
package main import ( "bytes" "encoding/gob" "encoding/json" "fmt" "log" ) func main() { // Register the map[string]interface{} type gob.Register(map[string]interface{}{}) 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)) } func CloneObject(a, b interface{}) []byte { buff := new(bytes.Buffer) enc := gob.NewEncoder(buff) dec := gob.NewDecoder(buff) 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 }
この例では、 gob.Register(map[string]interface{}{} ) main 関数の先頭で、map[string]interface{} タイプを登録します。その結果、後続の gob エンコードおよびデコード操作は、「タイプが登録されていません」エラーが発生することなく機能するはずです。
以上がGo で Gob を使用して「map[string]interface{}」をエンコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。