首页  >  文章  >  后端开发  >  为什么更改 Go Map 分配中的缩进会影响输出顺序?

为什么更改 Go Map 分配中的缩进会影响输出顺序?

Patricia Arquette
Patricia Arquette原创
2024-11-21 05:38:11175浏览

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