假设我想更改数组中所有对象的值。
我喜欢范围语法不仅仅是命名 for 循环。

所以我试过:

type Account struct {
   balance int
}
type AccountList []Account
var accounts AccountList
...
....
// to init balances
for _,a := range( accounts ) {
    a.balance = 100
}

这不起作用,因为 a 是 AccountList 条目的副本,因此我们只更新副本。

这确实有效,因为我需要它:
for a := range( accounts ) {
  accounts[a].balance = 100
}

但是该代码在 for 循环内有一个额外的查找。

有没有办法做一个迭代器来获取对 AccountList 中结构的引用?

最佳答案

只需让 AccountList 为 []*Account。然后您将获得指向范围内每个帐户的指针。

关于reference - Go:你可以在 slice 中使用范围但获得引用吗? (迭代),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4948741/

10-12 17:21