玩 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
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消