for something := range fruits{ aMap := make(map[string]aStruct) aSuperMap := make(map[string]map[string]aStruct) for x := range something{ aMap[x] = aData aSuperMap[y] = aMap delete(aMap,x) save aSuperMap saveASuperMap(something)}9 O5 ^6 m/ ]" o& f' V! e$ U
我也尝试了一些动态的东西,但很明显抛出了一个错误(不能分配给 nil)9 U) `- A: g- R1 f( N) o. f
aSuperMap[y][x] = aData / v. v" ?3 ^ P" K
问题是如何创建相关地图?PHP 中,我只用 aSuperMap[y][x] = aData。好像golang没有明显的办法。delete(aMap,x)从超级地图中删除 它的参考,它也将被删除。如果我不删除它,超级地图最终会有重复的数据。基本上,它会在每个循环中获得aMap新值加上所有旧值。 ! a( ~! {6 C6 c# H. o* V6 p : o* V4 H' d& i x/ `0 U, G8 G 解决方案: ! q/ k) v3 o) U. T/ A- C" b, Y 你不是在复制地图,而是在复制引用地图。delete因此,对原始地图和超级地图中的值进行了修改。要复制地图,你必须使用它for循环:6 W0 N* [5 L! W5 s
for k,v := range originalMap { newMap[k] = v} 4 P! v) S& t' p% u7 L5 u+ W# f
这是已停止的 SO 文档中的一个示例:1 A9 Z7 Z; V R- ~5 d: u
// Create the original maporiginalMap := make(map[string]int)originalMap["one"] = 1originalMap["two"] = 2// Create the target maptargetMap := make(map[string]int)// Copy from the original map to the target mapfor key,value := range originalMap { targetMap[key] = value}" [; y$ I4 S$ Q/ F