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

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

切片元素未在 go 中更新

切片元素未在 go 中更新

Go
慕尼黑8549860 2022-07-18 10:04:43
我有一個帳戶結構如下:type Account struct {    Id       string    Name     string    Address  string    City     string    Email    string    Phone    string    Username string    Password string    IsActive bool}我也有兩個功能:find和update。該find函數從切片中找到某個元素并返回指向該元素的指針:func find(accounts []Account, username string) *Account {    for _, acc := range accounts {        if acc.IsActive && acc.Username == username {            return &acc        }    }    return nil}更新函數從參數更改某些字段:func update(account *Account, name string) {    account.Name = name}在main中,我嘗試find從切片中提取一個元素并將其存儲到帳戶指針。然后,我嘗試update下一行中的一個字段。這就是我的main樣子:func main() {    accounts := []Account{{        Id:       "1",        Name:     "name",        Address:  "address",        City:     "city",        Email:    "[email protected]",        Phone:    "123456789",        Username: "username",        Password: "1234",        IsActive: true,    }}    var acc *Account    acc = find(accounts, "username")    fmt.Printf("%v\n", accounts)    fmt.Println(acc)    update(acc, "updated")    fmt.Printf("%v\n", accounts)    fmt.Println(acc)}問題是update調用時,切片中的元素沒有更新。它只是更新存儲帳戶的數據。下面是main的輸出:// find[{1 name address city [email protected] 123456789 username 1234 true}]&{1 name address city [email protected] 123456789 username 1234 true}// update[{1 name address city [email protected] 123456789 username 1234 true}]&{1 updated address city [email protected] 123456789 username 1234 true}當存儲元素發生變化時,如何使切片內的元素更新?感謝您的幫助,任何建議將不勝感激。
查看完整描述

1 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

問題是您返回的是元素的副本,而不是數組中元素的實際地址


return &acc

如下更改您的查找功能


func find(accounts []Account, username string) *Account {

for idx , acc := range accounts {

    if acc.IsActive && acc.Username == username {

        return &accounts[idx]

    }

}

return nil

}

你會得到預期的回應


[{1 name address city [email protected] 123456789 username 1234 true}]

&{1 name address city [email protected] 123456789 username 1234 true}

[{1 updated address city [email protected] 123456789 username 1234 true}]

&{1 updated address city [email protected] 123456789 username 1234 true}

您可以在 go playground中查看更新的代碼



查看完整回答
反對 回復 2022-07-18
  • 1 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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