首页 文章

虽然map总是引用类型,但是如果它们是从非指针接收器返回的呢?

提问于
浏览
-2

据说 Map 是Go中的引用类型,因此当从函数返回它们时,您不需要作为指向 Map 的指针传递,以便更改在函数体外部可见 . 但是如果从非指针结构上的方法返回所述映射呢?

例如:

type ExampleMapHolder struct {
    theUnexportedMap map[string]int
}

func (emp ExampleMapHolder) TheMap() map[string]int {
    return emp.theUnexportedMap
}

如果我调用 TheMap() ,然后修改其中的值,即使接收器不是指针,这个更改是否会在其他地方可见?我想它会返回一个属于ExampleMapHolder副本的 Map 的引用,但是无法在文档中找到明确的答案 .

1 回答

  • 2

    你为什么不检查它?

    emp := ExampleMapHolder{make(map[string]int)}
    m := emp.TheMap()
    m["a"] = 1
    fmt.Println(emp) // Prints {map[a:1]}
    

    游乐场:http://play.golang.org/p/jGZqFr97_y

相关问题