首页 > 后端开发 > Golang > 为什么更改 Go Map 值的格式会影响其键的输出顺序?

为什么更改 Go Map 值的格式会影响其键的输出顺序?

Patricia Arquette
发布: 2024-11-26 19:00:13
原创
800 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板