【问题标题】:increment a struct var in a range loop [duplicate]在范围循环中增加 struct var [重复]
【发布时间】:2018-10-18 22:50:55
【问题描述】:

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

提前致谢

【问题讨论】:

    标签: variables go reference


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多