func main(){ x := map[int]string{1:"a", 2:"b", 3:"c"} r := make([]*string, 0, len(x)) for _, v := range x { r = append(r, &v) } for _, v := range r { fmt.Println(*v) } }
老师可以讲讲,为啥下面有时会输出ccc,有时会输出bbb的原理吗?
输出
有时
登陆购买课程后可参与讨论,去登陆吧
代码我格式化了一下:
这里有两个混淆的地方,
一:map的遍历顺序是不固定的。哪怕下面的代码,每次输出的也不一样。
二:这里通过range x赋值的v变量不是map里面元素的地址,而是 一个 string类型的局部变量,每次进入for循环体,会把map中的下一个元素复制到v中。因此同学的代码打出来的始终是3个相同的字母。至于到底是哪个,这个都可以。
谢谢老师,原来这样啊,遍历获取是string类型的局部变量,并不是map里面元素的地址。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
登录后可查看更多问答,登录/注册
Google架构师ccmouse联合大厂架构师合作推出。两位架构师,跨行业项目,共享租车项目面向未来,三端分离电商立足当下,助你吃透Go全栈开发。抓住当下,面向未来蓝海行业,提前突破35岁职业瓶颈!
175 1
251 3
40 1
37 1
在线咨询
领取优惠
免费试听
领取大纲
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星