gpt4 book ai didi

go - slice 元素未更新

转载 作者:行者123 更新时间:2023-12-03 10:09:44 30 4
gpt4 key购买 nike

我有一个帐户结构,如下所示:

type Account struct {
Id string
Name string
Address string
City string
Email string
Phone string
Username string
Password string
IsActive bool
}
我还有两个功能: findupdatefind函数从 slice 中找到某些元素,然后将指针返回到该元素:
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中,我尝试对 slice 中的元素进行 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时, slice 中的元素未更新。它只是更新存储帐户的数据。以下是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}
当store元素更改时,如何使 slice 中的元素更新?感谢您的帮助,任何建议将不胜感激。

最佳答案

问题是您要返回元素的副本,而不是数组中元素的实际地址

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}
您可以检查更新的代码 here in go playground

关于go - slice 元素未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65095052/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com