2016-08-02 84 views
-1

當我從Go中的地圖中檢索一個結構體時,是否獲取該值的副本?或者我能得到地圖中的實際值?是通過值或參考的golang地圖查找?

例如,假設我有一個從字符串的地圖結構:

type quality struct { 
    goodness int 
    crunchiness int 
} 
cookies := make(map[string]quality) 
cookies["nutrageous"] = quality{goodness: 3, crunchiness: 10} 

,我要修改的條目。

我可以指望返回的值與地圖中的值相同嗎?

c := cookies["nutrageous"] 
c.goodness += 5 

或者我還必須回去修改地圖中的內容嗎?

c := cookies["nutrageous"] 
c.goodness += 5 
cookies["nutrageous"] = c 
+2

由於在Go中沒有提及,所以答案顯然是:按價值。 – Volker

+1

我很開放,因爲你已經接受了一個答案(認爲關閉會阻止繼續downvotes)。然而,答案的根本原因是相同的,所以很好理解爲什麼你的例子在地圖中的值首先不可尋址時不可能工作。 – JimB

+0

所以我在你身邊的答案是一樣的,甚至這些問題源於相同的信息缺乏。但是關於SO的知識需要通過質疑來索引,而這些都是不同的指標 - 即使它們指向相同的答案仍然會增加網站的價值,這兩個問題都存在。 – Brendan

回答

6

將地圖索引返回地圖值的副本。如果映射值是一個結構,那麼對返回的結構值的修改將不會更改映射中的結構值。您需要將修改後的值分配回地圖。

如果該值是一個指向結構的指針,那麼可以通過該映射訪問對該結構的修改。