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

Linda Hamilton
Freigeben: 2024-11-12 10:28:02
Original
372 Leute haben es durchsucht

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

Map[string]interface{} mit gob kodieren

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.

Registrieren des Typs „Map[string]interface{}“

Um den Typ „map[string]interface{} zu registrieren , verwenden Sie die Funktion gob.Register:

gob.Register(map[string]interface{}{})
Nach dem Login kopieren

Diese Zeile fügt den Typ „map[string]interface{} zur Liste der bekannten Typen hinzu, die gob verarbeiten kann.

Beispiel

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage