Ответ
В Go порядок ключей в map не гарантирован и может меняться между итерациями. Это связано с тем, что map реализован как хеш-таблица, и порядок зависит от хеш-функции и внутренней структуры данных. Начиная с Go 1.0, разработчики намеренно рандомизируют порядок итерации, чтобы предотвратить зависимость от него в коде.
Пример:
m := map[string]int{"a": 1, "b": 2, "c": 3}
// Первая итерация
for k := range m {
fmt.Print(k) // Может вывести "a b c"
}
// Вторая итерация
for k := range m {
fmt.Print(k) // Может вывести "b a c"
}
Если нужен стабильный порядок, следует использовать сортировку ключей:
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])
}