マップ キーの割り当て順序が Go の出力に影響するのはなぜですか?
Go コードを指定すると:
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) }
このコードを実行すると、出力:
{40.68433 74.39967} map[Bell Labs:{40.68433 74.39967} test:{12 100}]
ただし、テスト頂点宣言の右中括弧を左に 4 つ移動すると、出力は次のように変わります:
{40.68433 74.39967} map[test:{12 100} Bell Labs:{40.68433 74.39967}]
この一見小さな変更マップの「順序」は使用されるハッシュ関数に依存するため、出力内のマップ キーの順序に影響します。 Go はランダム化されたハッシュ関数を使用して、ハッシュの衝突に基づくサービス拒否攻撃を防ぎます。したがって、マップの順序は保証されず、キーと値のペアを変更すると順序が変わる可能性があります。
Go の仕様では、マップを一意のキーを持つ順序のない要素のグループとして定義します。特定の順序を保証するものではありません。この設計により、ユーザーのコードを変更することなく、マップ キーの順序を変更する可能性のある最適化が可能になります。したがって、アプリケーション内のマップ キーの順序に依存するのは賢明ではありません。
以上がGo マップの値の書式設定を変更すると、キーの出力順序に影響するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。