【发布时间】:2017-04-02 12:50:11
【问题描述】:
在 Go 中映射是按值传递还是按引用传递?
总是可以像下面这样定义一个函数,但这是否有点矫枉过正?
func foo(dat *map[string]interface{}) {...}
返回值的问题相同。我应该返回指向地图的指针,还是将地图作为值返回?
目的当然是避免不必要的数据复制。
【问题讨论】:
-
blog.golang.org/go-maps-in-action:映射类型是引用类型,如指针或切片,所以上面的m的值为nil;它不指向初始化的地图。读取时,nil 映射的行为类似于空映射,但尝试写入 nil 映射会导致运行时恐慌;不要那样做。要初始化地图,请使用内置的 make 函数
-
Everything 在 Go 中都是按值传递的。有些值恰好是指针,或包含指针的结构。 (在某些情况下,如果您需要在某个地址重新分配地图值,您可能需要
*map) -
mh-cbon,Go 中没有引用类型。
-
@mh-cbon 我不是在谈论引用类型。我问的是地图是否通过引用传递,这相当于询问地图的地址是作为参数传递还是作为地图的“副本”传递(按值传递)。
-
@mh-cbon 没错,地图是指向 hmap 的指针。
标签: go