亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更改結構值

更改結構值

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 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號