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

切片元素未在 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@email.com",        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@email.com 123456789 username 1234 true}]&{1 name address city email@email.com 123456789 username 1234 true}// update[{1 name address city email@email.com 123456789 username 1234 true}]&{1 updated address city email@email.com 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@email.com 123456789 username 1234 true}]

&{1 name address city email@email.com 123456789 username 1234 true}

[{1 updated address city email@email.com 123456789 username 1234 true}]

&{1 updated address city email@email.com 123456789 username 1234 true}

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



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

添加回答

举报

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