douliang9057 2018-07-21 18:42
浏览 90
已采纳

在Golang中深度复制地图

From what I understand, maps are reference types in Go. So assignment will do shallow copy. I plan to do a recursive deep copy of Maps in golang. Recursive because I am dealing with a map that holds the unmarshalled contents of a 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
}

The Error: cannot take the address of (*dest)[key].(map[string]interface {}) How do I get around this? Are there other ways to deep maps?

I primer on the internals of map in golang, will also be useful.

  • 写回答

2条回答 默认 最新

  • douzhi4311 2018-08-04 11:55
    关注
    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
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题