variables - 在范围循环中递增结构变量

标签 variables go reference

<分区>

这一定是个菜鸟问题。从范围循环中获取元素后,我试图在结构/实例 (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}

提前致谢

最佳答案

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++
}

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

关于variables - 在范围循环中递增结构变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50242872/

相关文章:

python - 应该定义 undefined variable ,但我把它弄得太复杂了

Javascript - 获取没有页码的当前页面URL

go - 如何在 Golang 中接受服务器连接或跳出 accept() 循环

node.js - 如何使用 Mongoose 将多个引用保存到 MongoDB 中的其他文档?

c - 引用/取消引用身份

.net - 在 Visual Studio 2010 中添加对 .Net 4 项目的引用时出现错误 "HRESULT E_FAIL has been returned from a call to a COM component"

matlab - 如何在 MATLAB 中将数字连接到变量名?

javascript - Javascript 如何评估 "this"?

go - 如何添加go二进制作为bitbucket管道工件?

go - 无法创建在线网页