这一定是一个菜鸟问题。在从范围循环中获取元素后,我试图在struct / instance(A.a)中增加一个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++
}
}
输出:
{0 test}
{1 test1}
{0 test}
{1 test1}
期望的输出:
{0 test}
{1 test1}
{1 test}
{2 test1}
提前致谢
答案 0 :(得分:6)
Go中的所有作业都是副本。使用指针修改原始值:
var es = []*A{
&A{
a: 0,
s: "test",
},
&A{
a: 1,
s: "test1",
},
}
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++
}