我需要将 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}
}
因为结构可能非常大,这会导致脆弱且容易出错的代码(例如,如果将新字段添加到结构中)。
由于这是一个对性能敏感的应用程序,我想避免使用反射。有什么办法可以做到这一点吗?
茅侃侃
相关分类