Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erhalte ich in Go den Fehler „gob: Typ nicht registriert für Schnittstelle: map[string]interface {}“?

Warum erhalte ich in Go den Fehler „gob: Typ nicht registriert für Schnittstelle: map[string]interface {}“?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-11 09:29:03324Durchsuche

Why do I get the

Fehler: „gob: Typ nicht registriert für Schnittstelle: map[string]interface {}“

In Go stellt das gob-Paket bereit Unterstützung für die Kodierung und Dekodierung von Werten in eine binäre Darstellung. Wenn Sie jedoch versuchen, einen Map[string]interface{}-Wert mit gob zu kodieren, kann der folgende Fehler auftreten:

gob: type not registered for interface: map[string]interface {}

Dieser Fehler bedeutet, dass das gob-Paket den Typ „map[string]“ nicht kennt. Schnittstelle{}. Um dieses Problem zu beheben, müssen Sie den Typ explizit mit der Funktion „gob.Register“ registrieren.

gob.Register(map[string]interface{}{})

Durch die Registrierung des Typs teilen Sie dem gob-Paket mit, dass es „map[string]interface{“ erkennen und verarbeiten soll. }-Werte während der Kodierungs- und Dekodierungsvorgänge.

Hier ist eine modifizierte Version des von Ihnen bereitgestellten Codes, die die erforderliche Registrierung enthält:

package main

import (
    "bytes"
    "encoding/gob"
    "encoding/json"
    "fmt"
    "log"
)

func CloneObject(a, b interface{}) []byte {
    buff := new(bytes.Buffer)
    enc := gob.NewEncoder(buff)
    dec := gob.NewDecoder(buff)
    // Register the map[string]interface{} type for encoding
    gob.Register(map[string]interface{}{})
    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))
}

Nach der Registrierung des Typs können Sie den erfolgreich kodieren und dekodieren map[string]interface{}-Wert mit gob.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Go den Fehler „gob: Typ nicht registriert für Schnittstelle: map[string]interface {}“?. 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