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
DDDoriginal
2024-11-12 06:34:02756parcourir

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 {}

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{}{})

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))
}

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:
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