为了账号安全,请及时绑定邮箱和手机立即绑定

更改结构值

更改结构值

Go
慕少森 2022-01-10 14:25:19
玩 golang 不明白为什么我不能在 userGroup 结构中更改用户的电子邮件。package mainimport "fmt"type user struct {    name, email string}func (u *user) changeEmail(newEmail string) {    u.email = newEmail}type userGroup struct {    users map[int]user}func (ug *userGroup) mapOverUsers(fn func(u *user)) {    usersLen := len(ug.users)    for i := 0; i < usersLen; i++ {        usr := ug.users[i]        fn(&usr)    }}func main() {    ug := userGroup{        map[int]user{0: {"0", "ZZZ"}, 1: {"1", "ZZZ"}, 2: {"2", "ZZZ"}}}    fmt.Println(ug)    // should be same as (&ug).mapOverUsers    ug.mapOverUsers(func(u *user) {        u.changeEmail("XXX")        fmt.Println(u)    })    fmt.Println(ug)}我检查了一下,我相信我在内存中为ug(userGroup)和u(user)引用了相同的地址。也许这不是正确的方法,只是边看书边尝试简单的事情。谢谢你。
查看完整描述

1 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞



usr := ug.users[i]

在地图中创建用户的副本。此副本已修改。有两种方法可以解决此问题。首先是在地图中存储指向用户的指针:


type userGroup struct {

    users map[int]*user

}


第二种是将修改后的值存储回地图:


    usr := ug.users[i]

    fn(&usr)

    ug.users[i] = usr


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信