198
社区成员
发帖
与我相关
我的任务
分享
package main
import "fmt"
type Person struct {
Name string
Hobby string
}
func main() {
/*
m := make(map[string]Person)
m["p"] = Person{"Tony", "Reading"}
*/
m := map[string]Person{
"p": {"Tony", "Reading"},
}
m["p"].Name = "寅恪光潜"
fmt.Println(m)
}
这个会报错,不能赋值给map里结构体类型中的成员变量:
cannot assign to struct field m["p"].Name in map
我们修改成将这个map重新赋值给一个变量,来看下效果:
package main
import "fmt"
type Person struct {
Name string
Hobby string
}
func main() {
/*
m := make(map[string]Person)
m["p"] = Person{"Tony", "Reading"}
*/
m := map[string]Person{
"p": {"Tony", "Reading"},
}
np := m["p"]
np.Name = "寅恪光潜"
np.Hobby = "Coding"
m["p"] = np
fmt.Println(m["p"])
}
//{寅恪光潜 Coding}
OK,这个就可以更新了,知道为什么吗?
还有另一种可以直接更改,那就是使用指针:
package main
import "fmt"
type Person struct {
Name string
Hobby string
}
func main() {
/*
m := make(map[string]Person)
m["p"] = Person{"Tony", "Reading"}
*/
m := map[string]*Person{
"p": {"Tony", "Reading"},
}
m["p"].Name = "寅恪光潜"
m["p"].Hobby = "Coding"
fmt.Println(*m["p"])
}
//{寅恪光潜 Coding}
恩,没有问题,其实这些又回到了值类型和引用类型的区别
欢迎加入我们,一起学习go,一起进步成为技术达人!