最简单的问题再现:
package main
import "fmt"
type stringMap map[int]string
func (s *stringMap) Merge(m stringMap) {
for key, value := range m {
s[key] = value
}
}
func main() {
myMap := stringMap{1: "a", 2: "b"}
myMap.Merge(stringMap{3: "c"})
fmt.Println(myMap)
}
为什么我无法将key
变量用作mymap stringMap
上的密钥?
答案 0 :(得分:3)
您无法在指向地图的指针上使用索引(访问地图)。
您只需进行以下更改(注意已移除的*):
func (s stringMap) Merge(m stringMap) { ... }
答案 1 :(得分:2)
您可以将函数接收器更改为普通接收器(正如其他人所建议的那样),或者在函数内部取消引用((*s)[key] = value
)
答案 2 :(得分:1)
Merge
方法的接收器是指向地图的指针,该地图不支持[]
索引语法。如果您将接收器更改为(s stringMap)
,则一切都应该按照您的预期进行。