Go 在戈兰正确使用派生地图类型索引

Go 在戈兰正确使用派生地图类型索引,go,Go,这可能是一个初学者的问题。代码就像 type MYMAP map[int]int func (o *MYMAP) dosth(){ //this will fail to compile o[1]=2 } 错误消息:无效操作:o[1](索引类型为*MYMAP) 如何将MYMAP的底层类型访问为map?问题不在于它是别名,而在于它是指向映射的指针 Go不会像方法调用那样自动为映射或切片访问提供遵从指针。将o[1]=2替换为(*o)[1]=2将起作用。虽然你应该考虑为什么你(有效

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

type MYMAP map[int]int

func (o *MYMAP) dosth(){
    //this will fail to compile
    o[1]=2
}
错误消息:无效操作:o[1](索引类型为*MYMAP)


如何将MYMAP的底层类型访问为map?

问题不在于它是别名,而在于它是指向映射的指针


Go不会像方法调用那样自动为映射或切片访问提供遵从指针。将
o[1]=2
替换为
(*o)[1]=2
将起作用。虽然你应该考虑为什么你(有效)使用一个指针的地图。这样做可能有很好的理由,但通常你不需要指向映射的指针,因为映射是“引用类型”,这意味着你不需要指向它们的指针就可以看到在整个程序中对它们进行变异的副作用。

一个简单的修复方法是去掉指针,只需将
o*MYMAP
更改为
o MYMAP

type MYMAP map[int]int

func (o MYMAP) dosth(){
    o[1]=2
}

请注意,在接收器函数内调用
make
不会达到预期效果-一旦离开接收器函数,地图将保持不变。如果要在receiver函数中调用
make
,则需要使用指针。