Heim > Backend-Entwicklung > Golang > Warum scheint die Kartenausgabe von Go geordnet zu sein, obwohl die Karten ungeordnet sind?

Warum scheint die Kartenausgabe von Go geordnet zu sein, obwohl die Karten ungeordnet sind?

Mary-Kate Olsen
Freigeben: 2024-12-01 13:43:11
Original
110 Leute haben es durchsucht

Why Does Go's Map Output Seem Ordered Despite Maps Being Unordered?

Zuweisungsreihenfolge in Karten

In Go sind Karten ungeordnete Sammlungen von Schlüssel-Wert-Paaren. Die Ausgabe des folgenden Codeausschnitts scheint jedoch eine Reihenfolge für die Schlüssel-Wert-Paare vorzuschlagen:

package main

import "fmt"

type Vertex struct {
    Lat, Long float64
}

var m map[string]Vertex

func main() {
    m = make(map[string]Vertex)
    m["Bell Labs"] = Vertex{
        40.68433, 74.39967,
    }
    m["test"] = Vertex{
        12.0, 100,
    }
    fmt.Println(m["Bell Labs"])
    fmt.Println(m)
}
Nach dem Login kopieren

Wenn der obige Codeausschnitt ausgeführt wird, wird Folgendes ausgegeben:

{40.68433 74.39967}
map[Bell Labs:{40.68433 74.39967} test:{12 100}]
Nach dem Login kopieren

Wenn jedoch das Leerzeichen um die rechte geschweifte Klammer in der Belegung der Taste „test“ geändert wird, wird die Ausgabe Änderungen:

m["test"] = Vertex{
    12.0, 100,
}
Nach dem Login kopieren

Mit dieser Änderung lautet die Ausgabe:

{40.68433 74.39967}
map[test:{12 100} Bell Labs:{40.68433 74.39967}]
Nach dem Login kopieren

Erklärung

Das beobachtete Verhalten ist auf die Randomisierung von zurückzuführen Gos Karten-Hash-Funktion. Diese Randomisierung wird implementiert, um Denial-of-Service-Angriffe zu verhindern, die Hash-Kollisionen ausnutzen. Wie im Go Issue Tracker angegeben:

http://code.google.com/p/go/issues/detail?id=2630
Nach dem Login kopieren

Die Kartenreihenfolge ist in Go nicht garantiert. Obwohl aktuelle Implementierungen Karten nicht explizit neu anordnen, können zukünftige Implementierungen Karten während der GC oder anderen Vorgängen komprimieren, was möglicherweise Auswirkungen auf die Reihenfolge hat. Daher ist es unklug, sich in Ihrem Code auf die Kartenreihenfolge zu verlassen.

Das obige ist der detaillierte Inhalt vonWarum scheint die Kartenausgabe von Go geordnet zu sein, obwohl die Karten ungeordnet sind?. 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