我似乎无法在文档中找到它,是否可以保证字段中的顺序与结构中声明的顺序匹配?我知道它看起来在逻辑上是这样(由于内存布局),而且它似乎也以这种方式执行,但只是确定一下。如果这不是保证,我不希望代码稍后中断。例如,如果我有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条经验 获得超8个赞
尽管今天 GC(标准 Go 编译器)和 GCCGO 不重新编码结构字段,但我不会依赖任何排序。文档中没有明确的保证。这可能会在任一编译器的未来版本中完成。
字段重新排序是一种用于在不使用填充(不必要地膨胀结构的内存表示)的情况下对结构内的字段进行内存对齐的技术。
- 2 回答
- 0 关注
- 184 浏览
添加回答
举报
0/150
提交
取消