Maison > développement back-end > Golang > Comment encoder et décoder `map[string]interface{}` avec Gob in Go ?

Comment encoder et décoder `map[string]interface{}` avec Gob in Go ?

DDD
Libérer: 2024-11-12 06:34:02
original
792 Les gens l'ont consulté

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

Encodage de la carte[string]interface{} avec Gob

Dans Go, le package gob fournit un format de sérialisation pour l'encodage et le décodage des valeurs Go . Cependant, il est confronté à des défis lorsqu'il s'agit de types d'interface, y compris le type map[string]interface{}.

Lorsque vous tentez d'encoder une map[string]interface{} à l'aide de gob, l'erreur suivante se produit :

gob: type not registered for interface: map[string]interface {}
Copier après la connexion

Cette erreur indique que gob ne sait pas comment sérialiser le type map[string]interface{} car il n'est pas enregistré avec le package gob. Pour résoudre ce problème et réussir à encoder ce type, nous devons l'enregistrer auprès de gob en utilisant la ligne suivante :

gob.Register(map[string]interface{}{})
Copier après la connexion

Cela indique à gob comment sérialiser et désérialiser les cartes avec des clés de chaîne et des valeurs de types arbitraires.

Voici un exemple modifié qui intègre cet enregistrement :

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))
}
Copier après la connexion

En enregistrant le type map[string]interface{}, ce programme peut désormais encoder et décoder avec succès ce type à l'aide du package gob.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal