登录
首页 >  Golang >  Go问答

Golang 中的深度复制地图

来源:Golang技术栈

时间:2023-04-10 07:46:08 323浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《Golang 中的深度复制地图》,介绍一下golang,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

据我了解,地图是 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
}

终于介绍完啦!小伙伴们,这篇关于《Golang 中的深度复制地图》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>