指向地图的指针

时间:2010-05-11 09:41:26

标签: pointers dictionary go

将一些地图定义为:

var valueToSomeType = map[uint8]someType{...}
var nameToSomeType = map[string]someType{...}

我想要一个指向地图地址的变量(不要复制所有变量)。我尝试使用:

valueTo := &valueToSomeType
nameTo := &nameToSomeType

但在使用valueTo[number]时,它显示了
内部编译器错误:var没有类型,init:new

如何获得它?

修改

另一个问题显示错误。

3 个答案:

答案 0 :(得分:90)

地图是引用类型,因此它们始终通过引用传递。你不需要指针。

答案 1 :(得分:44)

更具体地说,来自Golang Specs

  

切片,地图和渠道为参考类型,不需要new分配的额外间接。
  内置函数make采用类型T,它必须是切片,地图或通道类型,可选地后跟特定于类型的表达式列表。
  它返回T类型的值( not *T )   内存按初始值

部分所述进行初始化

但是,关于function calls,参数会按值传递(始终)。
除了map参数的值是一个指针。

答案 2 :(得分:0)

@Mue的答案是正确的。

以下简单程序足以验证:

package main

import "fmt"

func main() {
    m := make(map[string]string, 10)
    add(m)
    fmt.Println(m["tom"]) // expect nil ???
}

func add(m map[string]string) {
    m["tom"] = "voldemort"
}

该程序的输出为

voldemort

如果通过值传递了映射,则在函数add()中添加映射将不会对main方法产生任何影响。但是我们看到方法add()增加了值。这将验证地图的指针是否传递给add()方法。