我似乎无法在文档中找到它,是否有任何保证,从字段的顺序将匹配在结构中声明的顺序?我知道这似乎是逻辑上的(由于内存布局),它似乎也是这样执行的,但只是确保。如果这不是保证,我不希望代码稍后再中断。反映Type.Field()订单
举例来说,如果我有
type Foo struct {
bar string `tag:"bar"`
baz string `tag:"baz"`
barbaz string `tag:"barbaz"`
}
,我跑这个代码:
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")
}
将tags
保证是["bar", "baz", "barbaz"]
?
会[Value.FieldByName](https://golang.org/pkg/reflect/#Value.FieldByName)帮助你的情况? –
我只是想要标签名称的东西,它更像是一个懒惰的程序员,并试图做少一点编码(它似乎总是变成一吨多的工作)。我不知道我是否会继续坚持这种方法,现在我只是对答案感兴趣。 – user3591723
即使GC(标准的Go编译器)和GCCGO不重构struct字段,我也不会依赖任何顺序。文档中没有明确的保证。 – thwd