据我了解,地图是Go中的参考类型。因此,分配将进行浅表复制。我计划在golang中进行Maps的递归深层复制。递归,因为我正在处理一个包含JSON的未编组内容的映射。
func deepCopyJSON(src map[string]interface{}, dest *map[string]interface{}) error { if src == nil || dest == nil { return errors.New("src/dest is nil. You cannot insert to a nil map") } for key, value := range src { if reflect.TypeOf(value).String() != jsonType { (*dest)[key] = value } else { (*dest)[key] = make(map[string]int) //Suspect code below causes the error. deepCopyJSON(value.(map[string]interface{}), &(((*dest)[key]).(map[string]interface{}))) } } return nil }
错误:无法使用(* dest)[key]的地址。(map [string] interface {})我该如何解决?还有其他方法可以绘制深层地图吗?
我在golang的map的内部入门,也将很有用。
func deepCopyJSON(src map[string]interface{}, dest map[string]interface{}) error { if src == nil { return errors.New("src is nil. You cannot read from a nil map") } if dest == nil { return errors.New("dest is nil. You cannot insert to a nil map") } jsonStr, err := json.Marshal(src) if err != nil { return err } err = json.Unmarshal(jsonStr, &dest) if err != nil { return err } return nil }