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