我有一个看起来像这样的结构:
&main.INI{
Properties: []*main.Property{
&main.Property{
Key: "a",
Value: &main.Value{
String: &"a",
},
},
&main.Property{
Key: "b",
Value: &main.Value{
Number: &123,
},
},
},
Sections: []*main.Section{
&main.Section{
Identifier: "numbers",
Properties: []*main.Property{
&main.Property{
Key: "a",
Value: &main.Value{
Number: &10.3,
},
},
&main.Property{
Key: "b",
Value: &main.Value{
Number: &20,
},
},
},
},
&main.Section{
Identifier: "strings",
Properties: []*main.Property{
&main.Property{
Key: "a",
Value: &main.Value{
String: &"\"quoted\"",
},
},
&main.Property{
Key: "b",
Value: &main.Value{
String: &"b",
},
},
},
},
},
}
以下源代码的AST:
a = "a"
b = 123
# A comment
[numbers]
a = 10.3
b = 20
; Another comment
[strings]
a = "\"quoted\""
我想知道是否有可能在sections -> properties -> key
无需创建2个循环:
var keys []string
for _, section := range ini.Sections {
for _, property := range section.Properties {
keys = append(keys, property.Key)
}
}
我还在另一个程序中生成AST,该程序需要3个嵌套循环才能获取特定属性。有更好的方法吗?包装或其他东西?
我发现go-funk
,它提供了一种.Get
方法:
funk.Get(ini, "Sections.Properties.Key").([]string)
但是它没有得到维护。
谢谢。