当前位置: 首页 > 面试题库 >

Google Go Lang分配顺序

翟源
2023-03-14
问题内容

让我们看下面的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}]

但是,如果我更改测试顶点声明 小部分,请向右移动“ }” 4个空格,如下所示:

m["test"] = Vertex{
    12.0, 100,
}

..然后输出更改为:

{40.68433 74.39967}

map[test:{12 100} Bell Labs:{40.68433 74.39967}]

为什么修改很少会影响我的地图顺序?


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 以下Python表达式之间有什么区别: 第一给出的结果与第二给出的结果不同。 例如, 第一: 第二: y是第一的 3 和第二的 4 问题答案: 在赋值语句中,总是在对变量进行实际设置之前先对右侧进行全面评估。所以, 评估板y(我们称之为的结果),评估(呼叫),然后设置要和y到。也就是说,就像 相比之下, 设置x为y,然后设置,因此等效于

  • 问题内容: 我认为两者是相同的。 但是结果是不同的。 为什么结果不同?(为什么第二个结果呢?) 问题答案: 先决条件 -2个重点 列表是可变的 列表的主要部分是列表是可变的。这意味着可以更改列表的值。这就是您遇到麻烦的原因之一。请参阅文档以获取更多信息 评估顺序 另一部分是,在拆开元组的包装时,评估从左到右开始。请参阅文档以获取更多信息 介绍 当您执行和的值时,将首先存储它们。然后从左侧开始,将的

  • null 非常感谢你的帮助

  • 问题内容: 我有一些这样的数据: 我想查询它看起来像这样: …这样我就可以按数字连续的方式按GROUP BY分组。 另外,循环/游标也是不可能的,因为我正在处理大量数据,谢谢。 问题答案:

  • 问题内容: 我有下表称为问题: 我只想选择每个询问者一次,如果有多个同名提问者,请选择ID最高的一个。因此,预期结果: 我使用以下查询: 我得到以下结果: 因此,它将选择遇到的第一个“鲍勃”,而不是最后一个。 谢谢 问题答案: 如果要为每一个添加最后一个,则应使用聚合函数: 之所以得到不寻常的结果,是因为MySQL使用了一个扩展名,该扩展名允许未选择列表中的项进行汇总,并且不包含在GROUP BY

  • 问题内容: 在此问题中, 有一个功能要求,要求使用可选种子进行订购,以允许随机订购。 我需要能够对随机排序的结果进行分页。用Elasticsearch 0.19.1怎么做? 谢谢。 问题答案: 您可以使用唯一字段(例如id)和随机盐的哈希函数进行排序。根据结果​​的真实程度,您可以执行以下原始操作: 或像 第二个示例将产生更多随机结果,但速度会稍慢。 为了使这种方法起作用,必须存储字段。否则,查询