Heim  >  Artikel  >  Backend-Entwicklung  >  Warum wirkt sich das Ändern der Einrückung in Go-Map-Zuweisungen auf die Ausgabereihenfolge aus?

Warum wirkt sich das Ändern der Einrückung in Go-Map-Zuweisungen auf die Ausgabereihenfolge aus?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-21 05:38:11166Durchsuche

Why Does Changing the Indentation in Go Map Assignments Affect the Output Order?

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!

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