在范围循环中递增struct var

mar*_*tin 0 variables reference go

这必须是一个菜鸟问题.在从范围循环中获取元素后,我试图在struct/instance(Aa)中增加一个var.看起来我得到了元素的副本,如何在范围循环中引用元素本身?

package main
import "fmt"

type A struct {
  a int
  s string
} 

func main() {
  var es = []A {
     A{
       a:0,
       s:"test",
     },
     A{
       a:1,
       s:"test1",
     },
  }
  for _,e:=range es {
    fmt.Printf("%v\n", e)
    e.a++
  }
  for _,e:=range es {
    fmt.Printf("%v\n", e)
    e.a++
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

{0 test}
{1 test1}
{0 test}
{1 test1}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

{0 test}
{1 test1}
{1 test}
{2 test1}
Run Code Online (Sandbox Code Playgroud)

提前致谢

Jim*_*imB 6

Go中的所有作业都是副本.使用指针修改原始值:

var es = []*A{
    &A{
        a: 0,
        s: "test",
    },
    &A{
        a: 1,
        s: "test1",
    },
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/pz8PwEviMwm

或者,不要复制该值

for i := range es {
    fmt.Printf("%v\n", es[i])
    es[i].a++
}
for i := range es {
    fmt.Printf("%v\n", es[i])
    es[i].a++
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/EGl1INcBaTI