【问题标题】:Value set on struct member of an array gets lost after function returns函数返回后,在数组的结构成员上设置的值会丢失
【发布时间】:2016-11-03 06:45:50
【问题描述】:

在 golang 中,我的理解是 array 切片类型是引用。我遇到了一个问题,golang 的行为就像是在复制数据,而不是传递引用。

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

type Temp struct {
    Id   string `json:"id"`
    Lost string `json:"lost"`
}

func makeFoo1() []Temp {
    foos := make([]Temp, 0)
    foos = append(foos, Temp{Id: "foo"})
    return foos
}

func makeFoo2() []Temp {
    foos := makeFoo1()
    for _, t := range foos {
        t.Lost = "lost"
    }
    return foos

}

func main() {
    j, _ := json.Marshal(makeFoo2())
    fmt.Printf("%s\n", j)
}

这个输出是[{"id":"foo","lost":""}]

如何在 makeFoo2 中赋值t.Lost = "..." 以免丢失?或者我想真正的问题是如何确保数组是引用而不是值?

【问题讨论】:

    标签: arrays go pass-by-reference


    【解决方案1】:

    这是我自己想出来的——range 返回的实际上是一个副本。这解决了它

    func makeFoo2() []Temp {
        foos := makeFoo1()
        for i, _ := range foos {
            foos[i].Lost = "lost"
    
        }
        return foos
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 2012-11-03
      相关资源
      最近更新 更多