為什麼 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中文網其他相關文章!