Non riesco a trovarlo nella documentazione, è possibile garantire che l'ordine dei campi corrisponda all'ordine dichiarato nella struttura? So che sembra logico (a causa del layout della memoria) e sembra funzionare anche in questo modo, ma solo per essere sicuro. Non voglio che il codice si interrompa più tardi se questa non è una garanzia.Riflettere l'ordine Type.Field()
Per esempio, se ho avuto
type Foo struct {
bar string `tag:"bar"`
baz string `tag:"baz"`
barbaz string `tag:"barbaz"`
}
e ho corso questo codice:
var c Foo
t := reflect.TypeOf(c)
nf := t.NumField()
tags := make([]string, nf)
for f := 0; f < nf; f++ {
tags[f] = t.Field(f).Tag.Get("tag")
}
Would tags
essere garantita come ["bar", "baz", "barbaz"]
?
Potrebbe [Value.FieldByName] (https://golang.org/pkg/reflect/#Value.FieldByName) aiutare nel tuo caso? –
Volevo solo che i nomi dei tag avessero qualcosa, ero più un programmatore pigro e cercavo di fare un po 'meno di programmazione (che sembra sempre più un lavoro). Non so se continuerò a seguire questo metodo, ora sono solo un po 'interessato alla risposta. – user3591723
Anche se GC (il compilatore standard di Go) e GCCGO non modificano i campi struct, non fare affidamento su alcun ordine. Non ci sono garanzie espresse nella documentazione. – thwd