首页 > 解决方案 > 包含指向结构的指针的深度复制映射

问题描述

我目前有一张地图如下

licFeatureMem              = make(map[string][]*common.Feature)

我需要制作地图的副本以传递给一些修改相同的函数,这样我就不会丢失原始副本

modFeatureMem := make(map[string][]*common.Feature)
        for key, lst := range licFeatureMem {
            var newFtLst []*common.Feature
            for _, info := range lst {
                newFtLst = append(newFtLst, info)
            }
            modFeatureMem[key] = &newFtLst
        }

看到的是什么时候modFeatureMem被修改了,原来licFeatureMem的也被修改了。有人可以帮助我如何做到这一点吗?

标签: arraysgo

解决方案


common.Feature复制的地图具有指向原始地图实例的相同指针。任何修改都common.Feature将在两个地图上可见。要获得真正的深层副本,您还必须复制这些对象:

for key, lst := range licFeatureMem {
            var newFtLst []*common.Feature
            for _, info := range lst {
                newInfo:=*info
                newFtLst = append(newFtLst, &newInfo)
            }
            modFeatureMem[key] = &newFtLst
        }

推荐阅读