2016-11-10 78 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