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
有疑问加站长微信联系(非本文作者)