【发布时间】:2021-03-13 15:26:13
【问题描述】:
我有一个如下的账户结构:
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}
当store元素发生变化时,如何让切片内的元素更新?感谢您的帮助,任何建议都将不胜感激。
【问题讨论】:
-
您不是在更新切片,而是在更新切片元素之一的副本。