У меня есть структура, которая выглядит следующим образом:
&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)
Но он не поддерживается.
Спасибо.