2017-09-12 1 views
-3
type student struct { 
    Name string 
    Age int 
} 

func main() { 
    m := make(map[string]*student) 
    s := []student{ 
     {Name: "Allen", Age: 24}, 
     {Name: "Tom", Age: 23}, 
    } 

    for _, stu := range s { 
     m[stu.Name] = &stu 
    } 
    fmt.Println(m) 
    for key, value := range m { 
     fmt.Println(key, value) 
    } 
} 

Ergebnis erklären:Wie golang Scheibe Palette Phänomen

Karte [Allen: 0xc42006a0c0 Tom: 0xc42006a0c0]

Alle & {Tom 23}

Tom & {Tom 23}

Wie Slice zu erklären Das Phänomen ist meiner Meinung nach, sollte die Adresse eines jeden Mitglied von s sein, aber von den Ergebnissen hat s die gleiche Adresse.

+1

STU ist eine Schleifenvariable und existiert nur einmal: Die Variable (== die Speicheradresse) auf allen Iterationen der Schleife wieder verwendet wird . – Volker

Antwort

4

Die Anwendung nimmt die Adresse der lokalen Variablen stu. Ändern der Code die Adresse des Scheibenelements zu nehmen:

for i := range s { 
    m[s[i].Name] = &s[i] 
} 

https://play.golang.org/p/0izo4gGPV7

Verwandte Themen