2010-05-11 71 views
32

有一些地图定义为:指向一个地图

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

我想指向地图的地址的变量(以不复制所有变量)。我试了一下使用:

valueTo := &valueToSomeType 
nameTo := &nameToSomeType 

,但在使用valueTo[number],它显示了
内部编译器错误:VAR无类型时,init:新

如何获得呢?

编辑

错误是由另外一个问题显示。

回答

73

地图是引用类型,所以它们都是通过引用传递的。你不需要一个指针。

+1

看看这里:https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go – Joppe 2017-04-30 08:50:04

+0

是的,戴夫描述它更好。阅读他的博客条目。 – Mue 2017-05-01 15:12:02

37

更具体地,从Golang Specs

Slices, maps and channels are reference types that do not require the extra indirection of an allocation with new .
The built-in function make takes a type T , which must be a slice, map or channel type, optionally followed by a type-specific list of expressions.
It returns a value of type T (not *T).
The memory is initialized as described in the section on initial values

然而,关于function calls,所述参数由值(总是)通过
除了map参数的值是一个指针。

+0

那么谁是对的? – 2014-04-15 21:16:37

+2

@JuliusF两者,但我的回答更精确:指针是按值传递的。更多关于“通过价值传递”http://stackoverflow.com/a/23046811/6309。 – VonC 2014-04-15 21:18:39