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)} : W! s& Q$ c' d$ ^
我也尝试了一些动态的东西,但很明显抛出了一个错误(不能分配给 nil). S$ z( O. K4 J' _& e
aSuperMap[y][x] = aData % U2 W' R+ ~# l5 E5 e
问题是如何创建相关地图?PHP 中,我只用 aSuperMap[y][x] = aData。好像golang没有明显的办法。delete(aMap,x)从超级地图中删除 它的参考,它也将被删除。如果我不删除它,超级地图最终会有重复的数据。基本上,它会在每个循环中获得aMap新值加上所有旧值。 : F0 D% i- s0 S) g : {. U2 X) t1 K0 b" V解决方案: ) g# j N2 t! A 你不是在复制地图,而是在复制引用地图。delete因此,对原始地图和超级地图中的值进行了修改。要复制地图,你必须使用它for循环:7 c% p- a+ e0 F$ ~$ W, C4 Z; e& s0 E
for k,v := range originalMap { newMap[k] = v}; j, q( I2 O5 C* w, o: K6 I& W
这是已停止的 SO 文档中的一个示例:& A4 v3 A" y8 `
// 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} * `" Z2 `6 A2 c0 X& K* s5 q