为了账号安全,请及时绑定邮箱和手机立即绑定

反映 Type.Field() 顺序

反映 Type.Field() 顺序

Go
慕桂英4014372 2021-11-08 10:01:27
我似乎无法在文档中找到它,是否可以保证字段中的顺序与结构中声明的顺序匹配?我知道它看起来在逻辑上是这样(由于内存布局),而且它似乎也以这种方式执行,但只是确定一下。如果这不是保证,我不希望代码稍后中断。例如,如果我有type Foo struct {    bar    string `tag:"bar"`    baz    string `tag:"baz"`    barbaz string `tag:"barbaz"`}我运行了这个代码:var c Foot := 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"]?
查看完整描述

2 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

我在 golang-nuts 上问过这个问题,得到了 Ian Lance Taylor 的回答,确认它是声明顺序,不会改变。


查看完整回答
反对 回复 2021-11-08
?
青春有我

TA贡献1784条经验 获得超8个赞

尽管今天 GC(标准 Go 编译器)和 GCCGO 不重新编码结构字段,但我不会依赖任何排序。文档中没有明确的保证。这可能会在任一编译器的未来版本中完成。

字段重新排序是一种用于在不使用填充(不必要地膨胀结构的内存表示)的情况下对结构内的字段进行内存对齐的技术。


查看完整回答
反对 回复 2021-11-08
  • 2 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信