2016-11-10 80 views
0

创建类型映射[INT]的变量的副本结构的另一个变量我有一个地图:去 - 不能向它分配一个变量到另一个

cart := map[10033207:{10033207 3 425 126} 10012761:{10012761 4 40 0}] 

我想在另一个创建的副本cart变量tempCart,以便我可以修改临时使用的tempCart在我的函数中。我希望购物车的价值保持不变。

tempCart := cart 
//some operation which modifies temp cart and make it 
//map[10033207:{10033207 2 425 126} 10012761:{10012761 1 40 0}] 

的问题是,当我修改tempCart,不知何故cart也越来越修改,并成为equaltempCart

后来当我打印cart的值时,得到: map[10033207:{10033207 2 425 126} 10012761:{10012761 1 40 0}]而不是原始值map[10033207:{10033207 3 425 126} 10012761:{10012761 4 40 0}]

我不明白其背后的原因,并想知道如何创建cart副本的解决方案。

编辑:这个问题已被标记为复制到copy one map to another但我知道如何复制一张地图到anothor,我的主要问题是为什么我不能只分配一个地图到另一个变量。为什么我必须在循环中复制它。

+1

'tempCart:= cart'只是分配一个结构的另一个参考。它不是“复制”。在Go中没有内置的方法来复制结构。你必须用另一个手动值来初始化新的结构,或者使用像https://github.com/jinzhu/copier – Nadh

+0

这样的库不能用指针做点什么吗? – Jagrati

+4

[为什么一个函数中的映射值受到另一个函数中映射项的影响?](http://stackoverflow.com/questions/39605295/why-is-a-map-value-in- one-function-affected-by-an-entry-to-the-map-in-another-fu)相关内容:[将地图的所有元素复制到另一个](http://stackoverflow.com/questions/7436864/复制的所有元素对的一地图 - 进入 - 另一个)。 – icza

回答

5

复制一个地图使用

for k,v := range originalMap { 
    newMap[k] = v 
} 
+0

这不会对地图中的结构进行深层复制。 – Nadh

+0

是的,因为这些结构中没有一个使用指针。 – nothingmuch