Google Go Lang分配顺序

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

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


慕森王
浏览 208回答 2
2回答

精慕HU

映射的“顺序”取决于所使用的哈希函数。哈希函数被随机化,以防止使用哈希冲突的拒绝服务攻击。有关详细信息,请参见问题跟踪器:http://code.google.com/p/go/issues/detail?id=2630根据规范不能保证地图顺序。尽管在当前的go实现中尚未完成,但将来的实现可能会在GC或其他操作期间进行某些压缩,这些操作会更改映射的顺序,而无需通过代码修改映射。假定规范中未定义属性是不明智的。映射是一种无序的一组元素,称为元素类型,由一组另一种类型的唯一键(称为键类型)索引。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go