为了账号安全,请及时绑定邮箱和手机立即绑定

Google Go Lang分配顺序

Google Go Lang分配顺序

Go
慕森王 2021-05-05 09:49:38
让我们看下面的Go代码:package mainimport "fmt"type Vertex struct {    Lat, Long float64}var m map[string]Vertexfunc 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}]但是,如果我更改测试顶点声明的一小部分,请向右移动“ }” 4个空格,如下所示:m["test"] = Vertex{    12.0, 100,}..然后输出更改为:{40.68433 74.39967}map[test:{12 100} Bell Labs:{40.68433 74.39967}]为什么修改很少会影响我的地图顺序?
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

映射的“顺序”取决于所使用的哈希函数。哈希函数被随机化,以防止使用哈希冲突的拒绝服务攻击。有关详细信息,请参见问题跟踪器:

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

根据规范不能保证地图顺序。尽管在当前的go实现中尚未完成,但将来的实现可能会在GC或其他操作期间进行某些压缩,这些操作会更改映射的顺序,而无需通过代码修改映射。假定规范中未定义属性是不明智的。

映射是一种无序的一组元素,称为元素类型,由一组另一种类型的唯一键(称为键类型)索引。


查看完整回答
反对 回复 2021-05-17
  • 2 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信