golang map的无序遍历踩坑之旅

2,670 阅读1分钟

背景

业务代码中的一个BUG,忘了保存现场,文字描述,自行脑补
画二维折线图,发现横轴展示的时间是乱序的

论证

调试代码如下:

func main() {
	a := make(map[string]string)
	a["a"] = "a"
	a["b"] = "b"
	a["c"] = "c"
	a["d"] = "d"
	for k, v := range a {
		fmt.Println(k + ":" + v)
	}
}

多次运行结果:

image.png

原因

golang源码在map遍历时的位置控制使用了随机数,传送门

image.png

为什么这么设计

image.png

image.png

解决

  • import sort
  • 维护一个数组

参考文献

blog.csdn.net/slvher/arti…

www.cnblogs.com/JoZSM/p/117…

cloud.tencent.com/developer/a…

www.cnblogs.com/qcrao-2018/…

github.com/golang/go/b…