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

DDD
Freigeben: 2024-11-12 06:34:02
Original
719 Leute haben es durchsucht

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 {}
Nach dem Login kopieren

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{}{})
Nach dem Login kopieren

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))
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage