我目前有一张 map ,如下

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

我需要制作 map 的副本以传递给某些功能,该功能对其进行了修改,以免丢失原始副本
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也被修改了。有人可以帮我吗?

最佳答案

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

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

09-12 19:58