关于 make(map[string]interface{}) 的一点疑问

Jaxon · · 2644 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

刚学 `Golang` 不久,勿喷 对于使用 `make(map[string]interface{})` 获取值的问题: ```golang func GetCellBatchLoc(phone []string) map[string]interface{} { // 获取每个手机号的前 7 位,用以数据库数据查询 var phonesStd []string for _, ph := range phone { phonesStd = append(phonesStd, ph[:7]) } result := make(map[string]interface{}) doc := make(map[string]string) // 初始化 phone service 的 MGO IP 地址 mgo_utils.Init(config.MGO_IP_SUVDATA) query := bson.M{"mobilenumber": bson.M{"$in": phonesStd}} filter := bson.M{"_id": 0, "mobilearea": 1, "areacode": 1, "mobilenumber": 1} docs := mgo_utils.FindAll(config.MGO_DB_SUVDATA, config.MGO_TABLE_DM_MOBILE, query, filter) // 迭代获取每一条 MongoDB 数据 for docs.Next(&doc) { // 屏幕输出 (1) fmt.Println(doc["mobilenumber"], doc) // 此处为发帖想问的问题 // 用 手机号前 7 位作为 key,map[string]string 作为 value result[doc["mobilenumber"]] = doc } // 屏幕输出 (2) for k, v := range result { fmt.Println(k, " ", v) } return result } ``` 用两个手机号 `15901832427, 18875056308` 进行测试,注释里对应屏幕输出(1) (2),结果如下: ``` // 屏幕输出 (1) 结果 1590183 map[areacode:021 mobilearea:上海 上海 mobilenumber:1590183] 1887505 map[areacode:023 mobilearea:重庆 重庆 mobilenumber:1887505] // 屏幕输出 (2) 结果 // 疑问在这里,value 值为什么相同 1590183 map[areacode:023 mobilearea:重庆 重庆 mobilenumber:1887505] 1887505 map[areacode:023 mobilearea:重庆 重庆 mobilenumber:1887505 ``` 新人,尝试用 `Go` 改写 `Python` 项目练手,发现了上面这个疑问。 自己初步猜测,应该是指针指向的原因,该怎么写可以保证返回结果 `value` 值不同。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2644 次点击  
加入收藏 微博
2 回复  |  直到 2019-07-29 16:21:24
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传