Map[string]interface{} mit Gob kodieren
In Go stellt das gob-Paket ein Serialisierungsformat zum Kodieren und Dekodieren von Go-Werten bereit . Beim Umgang mit Schnittstellentypen, einschließlich des Typs „map[string]interface{}“, stößt es jedoch auf Herausforderungen.
Beim Versuch, ein „map[string]interface{} mit gob zu kodieren, tritt der folgende Fehler auf:
gob: type not registered for interface: map[string]interface {}
Dieser Fehler weist darauf hin, dass gob nicht weiß, wie der Typ „map[string]interface{}“ serialisiert werden soll, da er nicht beim gob-Paket registriert ist. Um dieses Problem zu beheben und diesen Typ erfolgreich zu kodieren, müssen wir ihn mit der folgenden Zeile bei gob registrieren:
gob.Register(map[string]interface{}{})
Dadurch wird gob mitgeteilt, wie Karten mit Zeichenfolgenschlüsseln und Werten beliebiger Typen serialisiert und deserialisiert werden.
Hier ist ein modifiziertes Beispiel, das diese Registrierung enthält:
package main import ( "bytes" "encoding/gob" "encoding/json" "fmt" "log" ) func CloneObject(a, b interface{}) []byte { gob.Register(map[string]interface{}{}) 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 } 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)) }
Durch die Registrierung des Typs „map[string]interface{}“ kann dieses Programm diesen Typ nun erfolgreich mit dem Paket „gob“ kodieren und dekodieren.
Das obige ist der detaillierte Inhalt vonWie kodiere und dekodiere ich „map[string]interface{}' mit Gob in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!