Deep copying maps in Golang

随声附和 提交于 2019-12-01 13:56:12

I think of 2 solutions.

1) Simply mashal it back, then copy the bytes.

2) Recursive calls as below.

func deepCopyJSON(src map[string]interface{}, dest map[string]interface{}) {
    for key, value := range src {
        switch src[key].(type) {
        case map[string]interface{}:
            dest[key] = map[string]interface{}{}
            deepCopyJSON(src[key].(map[string]interface{}), dest[key].(map[string]interface{}))
        default:
            dest[key] = value
        }
    }
}

https://play.golang.org/p/l6W1PD4lppG

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
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!