尝试在Go中实现地图合并功能但失败

时间:2014-12-05 09:02:29

标签: map merge go

最简单的问题再现:

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上的密钥?

游乐场:http://play.golang.org/p/mSprMXq5QF

3 个答案:

答案 0 :(得分:3)

您无法在指向地图的指针上使用索引(访问地图)。

您只需进行以下更改(注意已移除的*):

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

答案 1 :(得分:2)

您可以将函数接收器更改为普通接收器(正如其他人所建议的那样),或者在函数内部取消引用((*s)[key] = value

答案 2 :(得分:1)

Merge方法的接收器是指向地图的指针,该地图不支持[]索引语法。如果您将接收器更改为(s stringMap),则一切都应该按照您的预期进行。