2016-07-01 5 views
0

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?

Antwort

0

Ich dachte, dies aus mir - was range kehrt tatsächlich eine Kopie ist. Dieses regelte es

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

    } 
    return foos 

} 
Verwandte Themen