在golang中,我的理解是数组切片类型是引用。我遇到了一个问题,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 = "..."
以便它不会丢失?或者我想真正的问题是如何确保数组是引用而不是值?
答案 0 :(得分:0)
我自己想出来了 - range
返回的实际上是副本。这修好了
func makeFoo2() []Temp {
foos := makeFoo1()
for i, _ := range foos {
foos[i].Lost = "lost"
}
return foos
}