玩 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 關注
- 153 瀏覽
添加回答
舉報
0/150
提交
取消