为什么 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中文网其他相关文章!