Heim > Artikel > Backend-Entwicklung > Warum wirkt sich das Ändern der Einrückung in Go-Map-Zuweisungen auf die Ausgabereihenfolge aus?
Zuweisungsreihenfolge in Go Maps
Beachten Sie den folgenden Go-Code:
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) }
Die Ausgabe lautet:
{40.68433 74.39967} map[Bell Labs:{40.68433 74.39967} test:{12 100}]
Wenn jedoch eine geringfügige Änderung an der Deklaration des Testscheitelpunkts vorgenommen wird, indem der Abschluss verschoben wird geschweifte Klammer vier Leerzeichen nach rechts:
m["test"] = Vertex{ 12.0, 100, }
Die Ausgabe ändert sich zu:
{40.68433 74.39967} map[test:{12 100} Bell Labs:{40.68433 74.39967}]
Es stellt sich die Frage: Warum wirkt sich diese geringfügige Änderung auf die Reihenfolge der Karte aus?
Antwort:
Die Reihenfolge einer Karte in Go hängt von der zugrunde liegenden verwendeten Hash-Funktion ab. Diese Hash-Funktion ist randomisiert, um Denial-of-Service-Angriffe abzuwehren, die Hash-Kollisionen ausnutzen. Weitere Informationen finden Sie im folgenden Issue-Tracker:
http://code.google.com/p/go/issues/detail?id=2630
Es ist wichtig, die Kartenreihenfolge zu beachten wird durch die Sprachspezifikation nicht garantiert. Während aktuelle Go-Implementierungen eine stabile Reihenfolge beibehalten, könnten zukünftige Revisionen Karten während der Speicherbereinigung oder anderen Vorgängen komprimieren und möglicherweise die Reihenfolge ändern, ohne dass die Karte explizit durch Code geändert wird. Daher ist es nicht ratsam, sich auf eine bestimmte Reihenfolge für Karten zu verlassen.
Wie in der Go-Spezifikation angegeben:
Eine Karte ist eine ungeordnete Gruppe von Elementen eines Typs , genannt Elementtyp, indiziert durch eine Reihe eindeutiger Schlüssel eines anderen Typs, genannt Schlüsseltyp.
Das obige ist der detaillierte Inhalt vonWarum wirkt sich das Ändern der Einrückung in Go-Map-Zuweisungen auf die Ausgabereihenfolge aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!