Ich kann es nicht in der Dokumentation zu finden, gibt es eine Garantie, dass die Reihenfolge aus den Feldern die Reihenfolge in der Struktur deklariert übereinstimmen? Ich weiß, es scheint logisch zu sein (aufgrund des Speicherlayouts), und es scheint auch so zu funktionieren, aber ich stelle nur sicher. Ich möchte nicht, dass Code später bricht, wenn dies keine Garantie ist.Reflect Type.Field() Auftrag
Zum Beispiel, wenn ich
type Foo struct {
bar string `tag:"bar"`
baz string `tag:"baz"`
barbaz string `tag:"barbaz"`
}
hatte und ich lief diesen Code:
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")
}
Würde garantiert werden tags
["bar", "baz", "barbaz"]
sein?
Würde [Value.FieldByName] (https://golang.org/pkg/reflect/#Value.FieldByName) in Ihrem Fall helfen? –
Ich wollte nur die Tag-Namen für etwas, es war mehr ich ein fauler Programmierer und versuchen, ein wenig weniger Codierung (die immer in eine Tonne mehr Arbeit, wie es scheint) zu tun. Ich weiß nicht, ob ich mich mehr an diese Methode halten werde, jetzt bin ich nur ein bisschen an der Antwort interessiert. – user3591723
Obwohl GC (der Standard-Go-Compiler) und GCCGO struct-Felder nicht neu ordnen, würde ich mich nicht auf irgendeine Reihenfolge verlassen. Es gibt keine ausdrücklichen Garantien in der Dokumentation. – thwd