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

Comment encoder une `map[string]interface{}` avec Gob in Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-12 10:28:02376parcourir

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

Encodage de map[string]interface{} avec gob

Dans Go, le package gob est largement utilisé pour encoder et décoder des structures de données. Cependant, vous pouvez rencontrer une erreur du type « gob : type non enregistré pour l'interface : map[string]interface {} » lorsque vous essayez d'encoder une carte avec des clés de chaîne et des valeurs d'interface{}.

Pour résoudre ce problème , il est nécessaire d'enregistrer le type map[string]interface{} avec le package gob. Ce faisant, gob acquerra la capacité de reconnaître et de gérer cette structure de données.

Enregistrement du type Map[string]interface{}

Pour enregistrer le type map[string]interface{} , utilisez la fonction gob.Register :

gob.Register(map[string]interface{}{})

Cette ligne ajoute le type map[string]interface{} à la liste des types connus que gob peut gérer.

Exemple

Considérez l'extrait de code suivant :

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
}

Dans cet exemple, nous avons inclus gob.Register(map[string]interface{}{}) au début de la fonction principale pour enregistrer la carte Type [chaîne]interface{}. En conséquence, les opérations ultérieures d'encodage et de décodage gob devraient fonctionner sans rencontrer l'erreur « type non enregistré ».

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