Maison > Article > développement back-end > Comment encoder une `map[string]interface{}` avec Gob in Go ?
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.
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.
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!