dqwh1218 2015-06-18 12:49
浏览 30
已采纳

尽管映射始终是引用类型,但是如果它们是从非指针接收器返回的,该怎么办?

Supposedly maps are reference types in Go, so when returning them from functions, you don't need to pass as a pointer to the map in order for the changes to be visible outside the function body. But what if said map is returned from a method on a non-pointer struct?

For example:

type ExampleMapHolder struct {
    theUnexportedMap map[string]int
}

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

If I make a call to TheMap(), and then modify a value in it, will this change be visible elsewhere even though the receiver is not a pointer? I imagine it would return a reference to a map that belonged to a copy of ExampleMapHolder, but haven't been able to find an explicit answer in the docs.

  • 写回答

1条回答 默认 最新

  • doushou3814 2015-06-18 13:02
    关注

    Why won't you just check it?

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

    Playground: http://play.golang.org/p/jGZqFr97_y

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab