首頁 >後端開發 >Golang >為什麼更改 Go Map 分配中的縮排會影響輸出順序?

為什麼更改 Go Map 分配中的縮排會影響輸出順序?

Patricia Arquette
Patricia Arquette原創
2024-11-21 05:38:11215瀏覽

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

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

但是,如果對測試頂點的聲明進行微小更改,請將右花括號向右移動四個空格:

m["test"] = Vertex{
    12.0, 100,
}

輸出更改為:

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

問題來了:為什麼這個輕微的修改會影響地圖的順序?

答案:

地圖中的順序Go 取決於所使用的底層雜湊函數。此雜湊函數是隨機的,以減輕利用雜湊衝突的拒絕服務攻擊。請參閱以下問題追蹤器以了解更多資訊:

http://code.google.com/p/go/issues/detail?id=2630

請務必注意地圖順序語言規範不保證。雖然目前的 Go 實作保持穩定的順序,但未來的修訂可能會在垃圾收集或其他操作期間壓縮映射,從而可能在不透過程式碼明確修改映射的情況下改變順序。因此,依賴映射的特定順序是不明智的。

如Go 規範所述:

映射是無序一種類型的元素組,稱為元素類型,由另一種類型(稱為鍵類型)的一組唯一鍵進行索引。

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

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