[go语言]初学者需要注意的问题-map

stevewang · · 3336 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1.直接对map对象使用[]操作符获得的对象不能直接修改状态
package main
func main() {
type person struct {age int}
m := map[string]person{"steve":{10}}
m["steve"].age = 100  // 编译错误:cannot assign to m["steve"].age
}

2.通过查询map获得的对象是个拷贝,对此对象的修改不能影响原有对象的状态
package main
func main() {
type person struct {age int}
m := map[string]person {"steve":{10}}
p := m["steve"]
p.age = 100 // 没有改变map中对象的状态!
println(p.age)
println(m["steve"].age)
}
输出:
100
10
解决方法:
1)map中存储指针而不是结构体
package main
func main() {
type person struct {age int}
m := map[string]*person{"steve":{10}}
p := m["steve"]
p.age = 100
println(p.age)
println(m["steve"].age)
}
输出:
100
100
2)修改了对象状态以后重新加到map里
package main
func main() {
type person struct {age int}
m := map[string]person {"steve":{10}}
p := m["steve"]
p.age = 100
println(p.age)
m["steve"] = p
println(m["steve"].age)
}
输出:
100
100


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

本文来自:新浪博客

感谢作者:stevewang

查看原文:[go语言]初学者需要注意的问题-map

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

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