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
Mary-Kate OlsenOriginal
2024-12-01 13:43:11107Durchsuche

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)
}

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

{40.68433 74.39967}
map[Bell Labs:{40.68433 74.39967} test:{12 100}]

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,
}

Mit dieser Änderung lautet die Ausgabe:

{40.68433 74.39967}
map[test:{12 100} Bell Labs:{40.68433 74.39967}]

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

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!

Stellungnahme:
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