Heim > Backend-Entwicklung > Golang > Wie wirkt sich Gos Slice Range Loop auf die Adresszuweisung in Karten aus?

Wie wirkt sich Gos Slice Range Loop auf die Adresszuweisung in Karten aus?

Mary-Kate Olsen
Freigeben: 2024-12-03 07:06:09
Original
346 Leute haben es durchsucht

How Does Go's Slice Range Loop Affect Address Assignment in Maps?

Das Verhalten von Go-Slice-Bereichen verstehen

In Go sind Slices eine grundlegende Datenstruktur, die eine effiziente und dynamische Speicherung von Elementen ermöglicht. Bei der Arbeit mit Slices ist es wichtig, das Verhalten von Bereichsschleifen zu verstehen.

Beachten Sie den folgenden Codeausschnitt:

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)
    }
}
Nach dem Login kopieren

Der Code definiert ein Slice von Student-Strukturen und eine Karte. Es iteriert mithilfe einer Bereichsschleife über das Slice, wobei jedes Element der Variablen „stu“ zugewiesen wird. Das beobachtete unerwartete Verhalten besteht jedoch darin, dass alle Karteneinträge auf dieselbe Adresse innerhalb des Slice verweisen.

Ursache:

Das Problem hat seinen Ursprung in der Zuweisung der Bereichsschleife zur Variablen 'stu.' Wenn die Schleife iteriert, wird „stu“ eine Kopie des Slice-Elements an diesem Index zugewiesen. Infolgedessen verweisen alle Karteneinträge auf denselben kopierten Wert.

Lösung:

Um dieses Verhalten zu beheben, sollte der Code explizit die Adresse jedes Slice übernehmen Element, bevor es in der Karte gespeichert wird:

for i := range s {
    m[s[i].Name] = &s[i]
}
Nach dem Login kopieren

Durch diese Änderung verweist jeder Karteneintrag nun auf die Adresse des tatsächlichen Slice-Elements und stellt so das erwartete Verhalten sicher. Dies zeigt, wie wichtig es ist, die Nuancen von Slice-Range-Schleifen zu verstehen und wie sie sich auf die Datenmanipulation in Go auswirken können.

Das obige ist der detaillierte Inhalt vonWie wirkt sich Gos Slice Range Loop auf die Adresszuweisung in Karten aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage