2014-12-05 129 views

回答

3

不能使用索引(訪問地圖)上的指針到地圖。

你只需要進行以下更改(要注意的去除*):

func (s stringMap) Merge(m stringMap) { ... } 
+0

哦,純分心內。我很習慣將方法添加到自動使用指針的結構中。謝謝! – marcio 2014-12-05 09:09:59

1

Merge方法的接收器是一個指針到地圖,它不支持[]索引語法。如果您將接收器更改爲(s stringMap),則所有內容都應如您所期望的那樣工作。

2

您既可以在功能接收器更改爲正常的接收器(如其他人所說),或取消對它的引用的函數((*s)[key] = value

+0

你認爲這在某種程度上會更好嗎? – marcio 2014-12-05 09:12:03

+1

這是我猜的一樣。地圖(和切片)已經[引用了底層結構](https://golang.org/doc/effective_go.html#maps)。使用價值接收者似乎更清潔 – Makpoc 2014-12-05 09:25:57

+1

如果您想要從方法內取代地圖(例如,來自'DecodeJSON'方法),您可能希望使用帶有地圖的指針接收器。但在大多數情況下,這是不必要的。 – 2014-12-05 10:46:25