Maison > développement back-end > Golang > Pourquoi est-ce que j'obtiens l'erreur « gob : type non enregistré pour l'interface : map[string]interface {} » dans Go ?

Pourquoi est-ce que j'obtiens l'erreur « gob : type non enregistré pour l'interface : map[string]interface {} » dans Go ?

Patricia Arquette
Libérer: 2024-11-11 09:29:03
original
471 Les gens l'ont consulté

Why do I get the

Erreur : "gob : type non enregistré pour l'interface : map[string]interface {}"

Dans Go, le package gob fournit prise en charge du codage et du décodage des valeurs dans une représentation binaire. Cependant, lorsque vous essayez d'encoder une valeur map[string]interface{} à l'aide de gob, vous pouvez rencontrer l'erreur :

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

Cette erreur signifie que le package gob ne connaît pas le type map[string] interface{}. Pour résoudre ce problème, vous devez explicitement enregistrer le type à l'aide de la fonction gob.Register.

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

En enregistrant le type, vous informez le package gob qu'il doit reconnaître et gérer map[string]interface{ } valeurs lors des opérations d'encodage et de décodage.

Voici une version modifiée du code que vous avez fourni qui inclut l'enregistrement nécessaire :

package main

import (
    "bytes"
    "encoding/gob"
    "encoding/json"
    "fmt"
    "log"
)

func CloneObject(a, b interface{}) []byte {
    buff := new(bytes.Buffer)
    enc := gob.NewEncoder(buff)
    dec := gob.NewDecoder(buff)
    // Register the map[string]interface{} type for encoding
    gob.Register(map[string]interface{}{})
    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

Après avoir enregistré le type, vous pouvez encoder et décoder avec succès le valeur map[string]interface{} en utilisant 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