Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kodiere und dekodiere ich „map[string]interface{}' mit Gob in Go?

Wie kodiere und dekodiere ich „map[string]interface{}' mit Gob in Go?

DDD
DDDOriginal
2024-11-12 06:34:02714Durchsuche

How to Encode and Decode `map[string]interface{}` with Gob in Go?

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!

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