map 的 key 为什么是无序的?
在遍历 map 的时候,我们会发现,输出的 key 是无序的。为什么?
在go <= 1.0 以后 迭代 map 的结果是无序的。 这是Golang map的实现原理导致的。在扩容中Map会指向新的桶,这是并不会立刻全部迁移,而是会指向新桶和旧桶。遍历Map上本质遍历这2个桶。但是发生了扩容Key的位置改变导致遍历的结果不同。 在go > 1.0 以前遍历Map的时候 不扩容时是有序的,扩容后将改变顺序。为了统一这个问题go>=1.0加入了遍历Map会随机播种,使得遍历无序。
参考资料: