gob : Encodage de cartes avec des interfaces
Lors de la tentative d'encodage d'une carte[string]interface{} à l'aide de Gob, les utilisateurs peuvent rencontrer l'erreur message : "gob : type non enregistré pour l'interface : map[string]interface {}." Cette erreur se produit car Gob nécessite que le type des données en cours d'encodage soit enregistré avant de pouvoir être traité.
La solution à ce problème est simple : enregistrez le type avec Gob à l'aide de la fonction gob.Register. Dans ce cas, le code suivant doit être ajouté au programme :
gob.Register(map[string]interface{}{})
Cette étape d'enregistrement informe Gob qu'il devrait pouvoir encoder et décoder des cartes avec des clés de chaîne et des valeurs d'interface.
Pour démontrer cela, considérons le code révisé suivant :
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)) }
Maintenant, lorsque ce code est exécuté, l'encodeur Gob encodera avec succès le map[string]interface{} dans un tableau d'octets. Le message d'erreur ne sera plus affiché.
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!