在遍历 map 的时候,我们会发现,输出的 key 是无序的。为什么?
输出的 key 是无序的本质原因是,遍历 map 时并不是固定地从 0 号 bucket 开始遍历,每次都是从一个随机值序号的 bucket 开始遍历,并且是从这个 bucket 的一个随机序号的 cell 开始遍历。
该随机值序号是在Go1.0开始加入的。
为什么要引入随机种子呢?因为在老版本若不发生扩容,遍历输出的顺序是固定的,但当扩容后,遍历输出的顺序就不固定了。这样会导致歧义。
扩容的时候,会导致原本在同一个bucket的key,被分配到不同的bucket中。导致遍历输出的顺序发生改变。
可以阅读文章Go_为什么Map是无序的