golang map 用range遍历不能保证顺序输出

前端之家收集整理的这篇文章主要介绍了golang map 用range遍历不能保证顺序输出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

按照之前我对map的理解,map中的数据应该是有序二叉树的存储顺序,正常的遍历也应该是有序的遍历和输出,但实际试了一下,却发现并非如此,网上查了下,发现从Go1开始,遍历的起始节点就是随机了,当然随机到什么程度还不清楚。

package main

import (
	"fmt"
)

func main() {
	x := make(map[int]int)
	for i := 0; i < 30; i++ {
		x[i] = i
	}
	for k,v := range x {
		fmt.Println(k,v)
	}
}

build后,多次执行,每次输出的结果都不同。当然,用fmt.Println("map: ",x) 输出同样是无序的结果

参考http://xhrwang.me/2014/12/25/golang-fundamentals-4-map-range.html,我理解为在range时为引用类型(slice,map,channel)创建索引,而map的索引是未被指定的,所以无序。


因此如果需要保证顺序输出,我是使用了slice。

关于golang中的map,还可以参阅https://blog.golang.org/go-maps-in-action

猜你在找的Go相关文章