Порядок перебора ключей map при for range в Go специально не определён и рандомизируется при каждом запуске. Так разработчики не могут полагаться на конкретный порядок - код не должен зависеть от него.
m := map[string]int{"a": 1, "b": 2, "c": 3}
for k := range m {
fmt.Println(k) // порядок может быть любой, и разный между запусками
}
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, m[k])
}