在golang中使用派生地图类型索引的正确方法

时间:2014-04-22 05:07:32

标签: go

这可能是一个初学者的问题。代码就像,

type MYMAP map[int]int

func (o *MYMAP) dosth(){
    //this will fail to compile
    o[1]=2
}

错误信息:无效操作:o [1](类型* MYMAP索引)

如何以地图的形式访问基础类型的MYMAP?

2 个答案:

答案 0 :(得分:8)

问题不在于它是别名,它是指向地图的指针。

Go不会按照方法调用的方式自动引用map或slice访问的指针。用o[1]=2替换(*o)[1]=2将有效。虽然你应该考虑为什么你(有效地)使用指向地图的指针。有充分的理由这样做,但通常你不需要指向地图的指针,因为地图是"引用类型",这意味着你不需要指向它们的指针看看在整个计划中改变它们的副作用。

答案 1 :(得分:1)

摆脱指针,可以轻松解决,只需将 { "auths": {}, "credHelpers": { "asia.gcr.io": "gcr", "eu.gcr.io": "gcr", "gcr.io": "gcr", "staging-k8s.gcr.io": "gcr", "us.gcr.io": "gcr" } 更改为o *MYMAP

o MYMAP