map用for range遍历不能保证顺序输出,原因:在range时为引用类型(slice,map,channel)创建索引,而map的索引是未被指定的,所以无序。

  解决方案:通过sort中的排序包进行对map中的key进行排序。

package main

import (
    "fmt"
    "sort"
)

func main() {
    var m = map[string]int{
        "9": 0,
        "2": 1,
        "5": 2,
        "1": 3,
    }
    var keys []string
    for k := range m {
        keys = append(keys, k)
    }
    sort.Strings(keys)      //升序
    for _, k := range keys {
        fmt.Println("Key:", k, "Value:", m[k])
    }
}