I am trying to copy a map to another map so i used gob in order to do this. But when i unmarshal a json to map[string]interface{} and then try to copy it to another map i get an error in the encoding part.
This is the code:
package main import ( "encoding/gob" "bytes" "fmt" "encoding/json" ) func CopyMapToAnotherMap(req map[string]interface{}) (cpy map[string]interface{}, err error) { var mod bytes.Buffer gob.Register(map[string]interface{}{}) enc := gob.NewEncoder(&mod) dec := gob.NewDecoder(&mod) err = enc.Encode(req) if err != nil { fmt.Println("Unable to encode map", err) return nil, err } err = dec.Decode(&cpy) if err != nil { fmt.Println("Unable to decode map", err) return nil, err } return cpy, nil } func main() { my := `{"data":[{"aa":1},{"bb":2}]}` var m map[string]interface{} err := json.Unmarshal([]byte(my), &m) if err != nil { fmt.Println(err) } CopyMapToAnotherMap(m) } and i am getting an error : gob: type not registered for interface: []interface {}
How can this be avoided?
[]interface {}but notmap[string]interface {}. Are you sure the error message is correct? If so, then it looks it is coming from something else.for k,v := range srcand populating the destination likedst[k] = v. If your input and output types do not coincident then you have to convert the keys and values. This is called programming. The internet is not full of recommendations to use gob because gob is something very useful but also very specific. Stop looking for a "magic" solution. Think about what you want to do exactly and start writing code.