首頁 >後端開發 >Golang >為什麼更改 Go Map 值的格式會影響其鍵的輸出順序?

為什麼更改 Go Map 值的格式會影響其鍵的輸出順序?

Patricia Arquette
Patricia Arquette原創
2024-11-26 19:00:13855瀏覽

Why Does Changing the Formatting of a Go Map's Value Affect the Output Order of its Keys?

為什麼 Map Key 的分配順序會影響 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}]

但是,如果我們將測試頂點聲明中的右花括號向左移動四個空格,輸出將更改為:

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

這個看似微小的修改影響輸出中映射鍵的順序,因為映射「順序」取決於所使用的雜湊函數。 Go 使用隨機雜湊函數來防止基於雜湊衝突的拒絕服務攻擊。因此,映射的順序無法保證,鍵值對的修改可能會改變該順序。

Go 的規範將映射定義為具有唯一鍵的無序元素組。它不提供特定訂單的保證。這種設計允許進行最佳化,從而可能改變映射鍵的順序,而無需對使用者程式碼進行任何修改。因此,依賴應用程式中映射鍵的順序是不明智的。

以上是為什麼更改 Go Map 值的格式會影響其鍵的輸出順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn