Чтобы ответить на исходный вопрос, используйте упорядоченную карту
package main
import (
"encoding/json"
"fmt"
"github.com/iancoleman/orderedmap"
)
func main() {
o := orderedmap.New()
// use Set instead of o["a"] = 1
o.Set("m_key", "123") // go json.Marshall doesn't like integers
o.Set("z_key", "123")
o.Set("a_key", "123")
o.Set("f_key", "123")
// serialize to a json string using encoding/json
prettyBytes, _ := json.Marshal(o)
fmt.Printf("%s", prettyBytes)
}
Но в соответствии со спецификацией https://json -schema.org / latest / json-schema-core.html # rfc.section.4.2 нет гарантии, что порядок карт соблюден, поэтому, вероятно, лучше использовать массив вместо вывода json
// convert to array
fmt.Printf("\n\n\n")
arr := make([]string, 8)
c := 0
for _, k := range o.Keys() {
arr[c] = k
c++
v, _ := o.Get(k)
arr[c], _ = v.(string)
c++
}
morePretty, _ := json.Marshal(arr)
fmt.Printf("%s", morePretty)
Когда массив будет перезагружен, он будет в правильном порядке