分享
[go语言]初学者需要注意的问题-map
stevewang · · 4073 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
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 = 100println(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 = 100println(p.age)m["steve"] = pprintln(m["steve"].age)
}
输出:
100
100
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信4073 次点击
下一篇:Go语言的指针 & *
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
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 = 100println(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 = 100println(p.age)m["steve"] = pprintln(m["steve"].age)
}
输出:
100
100