In golang zurückkehrt, mein Verständnis war, dass Array slice Typen Referenzen sind. Ich habe ein Problem, bei dem Golang sich so verhält, als würde er Kopien der Daten machen, anstatt Referenzen herumzugeben.Wert eingestellt auf struct Mitglied eines Arrays verloren geht nach Funktion
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)
}
Der Ausgang dieses ist [{"id":"foo","lost":""}]
Wie kann die Zuordnung in makeFoo2 gemacht werden t.Lost = "..."
, damit es nicht verloren geht? Oder ich denke, die wirkliche Frage ist, wie stelle ich sicher, dass das Array eine Referenz und kein Wert ist?