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 P# \& N, t5 M% {. ]
我也尝试了一些动态的东西,但很明显抛出了一个错误(不能分配给 nil) ; O! ^6 e5 s6 G( \" b
aSuperMap[y][x] = aData7 G: a5 U0 r; u+ X2 L
问题是如何创建相关地图?PHP 中,我只用 aSuperMap[y][x] = aData。好像golang没有明显的办法。delete(aMap,x)从超级地图中删除 它的参考,它也将被删除。如果我不删除它,超级地图最终会有重复的数据。基本上,它会在每个循环中获得aMap新值加上所有旧值。 G) V4 c! L. ]% i* A 0 {& W% E' t$ Q& N) R j& G解决方案: 5 {+ Z; g* ^( {1 X
你不是在复制地图,而是在复制引用地图。delete因此,对原始地图和超级地图中的值进行了修改。要复制地图,你必须使用它for循环: 7 n9 \4 D* M% o- ?5 ~; G
for k,v := range originalMap { newMap[k] = v}' s r1 p2 {- F/ m" F
这是已停止的 SO 文档中的一个示例: & R3 y" y; t4 D4 T4 n
// 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}" b- G7 ~ I% Q