Heim  >  Artikel  >  Backend-Entwicklung  >  Warum wirft Gob beim Kodieren einer Map[string]interface{} „gob: Typ nicht registriert für Schnittstelle: Map[string]Interface {}“ aus?

Warum wirft Gob beim Kodieren einer Map[string]interface{} „gob: Typ nicht registriert für Schnittstelle: Map[string]Interface {}“ aus?

Susan Sarandon
Susan SarandonOriginal
2024-11-19 13:06:03935Durchsuche

Why does Gob throw

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn