我需要将 a 转换struct为[]Tuple. 每个元组将表示到该结构的每个叶节点的路径。例如:type inner struct { D int}type Example struct { A string B *inner C []inner}e := Example{ A: "a", B: &inner{ D: 0, }, C: []inner{ inner{D:0}, inner{D:1}, inner{D:2}, },}func toTuple(e *Example) []Tuple { // this function should return: // [ // Tuple{"A", "a"} // Tuple{"B", "D", "0"} // Tuple{"C", 0, "D", 0} // Tuple{"C", 1, "D", 1} // Tuple{"C", 2, "D", 2} // ]}有没有什么方法可以做到这一点而不必手动指定每个元组?我想避免做类似的事情:tuples = append(tuples, Tuple{"A", e.A})......for i, v := range e.C { tuples = append(tuples, Tuple{"C", i, "D", v.D}}因为结构可能非常大,这会导致脆弱且容易出错的代码(例如,如果将新字段添加到结构中)。由于这是一个对性能敏感的应用程序,我想避免使用反射。有什么办法可以做到这一点吗?
1 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
你将不得不使用反射。我知道反射在性能方面表现不佳,但值得您花时间尝试它并在您注销它之前对其进行基准测试。
或者,您可以使用代码生成 - 可能仍会使用反射,但会在代码生成时输出将一起编译的 go 代码,因此在运行时不会影响性能。
- 1 回答
- 0 关注
- 78 浏览
添加回答
举报
0/150
提交
取消