In Go wird das gob-Paket häufig zum Kodieren und Dekodieren von Datenstrukturen verwendet. Es kann jedoch sein, dass beim Versuch, eine Karte mit Zeichenfolgenschlüsseln und Schnittstellen{}-Werten zu kodieren, ein Fehler wie „gob: Typ nicht registriert für Schnittstelle: Map[String]Schnittstelle {}“ auftritt.
Um dieses Problem zu beheben , ist es notwendig, den Typ „map[string]interface{}“ beim gob-Paket zu registrieren. Dadurch wird gob in die Lage versetzt, diese Datenstruktur zu erkennen und zu verarbeiten.
Um den Typ „map[string]interface{} zu registrieren , verwenden Sie die Funktion gob.Register:
gob.Register(map[string]interface{}{})
Diese Zeile fügt den Typ „map[string]interface{} zur Liste der bekannten Typen hinzu, die gob verarbeiten kann.
Betrachten Sie den folgenden Codeausschnitt:
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 }
In diesem Beispiel haben wir gob.Register(map[string]interface{}{}) am Anfang der Hauptfunktion eingefügt, um die Karte zu registrieren [string]interface{}-Typ. Daher sollten die nachfolgenden Gob-Kodierungs- und Dekodierungsvorgänge funktionieren, ohne dass der Fehler „Typ nicht registriert“ auftritt.
Das obige ist der detaillierte Inhalt vonWie kodiere ich eine „map[string]interface{}' mit Gob in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!