Heim > Artikel > Backend-Entwicklung > Warum wirft Gob beim Kodieren einer Map[string]interface{} „gob: Typ nicht registriert für Schnittstelle: Map[string]Interface {}“ aus?
gob: Karten mit Schnittstellen kodieren
Beim Versuch, eine Karte[string]schnittstelle{} mit Gob zu kodieren, kann bei Benutzern der Fehler auftreten Meldung: „gob: Typ nicht registriert für Schnittstelle: map[string]interface {}.“ Dieser Fehler tritt auf, weil Gob erfordert, dass der Typ der codierten Daten registriert wird, bevor er verarbeitet werden kann.
Die Lösung für dieses Problem ist einfach: Registrieren Sie den Typ bei Gob mithilfe der Funktion gob.Register. In diesem Fall sollte der folgende Code zum Programm hinzugefügt werden:
gob.Register(map[string]interface{}{})
Dieser Registrierungsschritt informiert Gob darüber, dass es in der Lage sein sollte, Karten mit Zeichenfolgenschlüsseln und Schnittstellenwerten zu kodieren und zu dekodieren.
Um dies zu demonstrieren, betrachten Sie den folgenden überarbeiteten Code:
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)) }
Wenn dieser Code nun ausgeführt wird, codiert der Gob-Encoder die Karte[string]interface{} erfolgreich in ein Byte-Array. Die Fehlermeldung wird nicht mehr angezeigt.
Das obige ist der detaillierte Inhalt vonWarum wirft Gob beim Kodieren einer Map[string]interface{} „gob: Typ nicht registriert für Schnittstelle: Map[string]Interface {}“ aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!