Простой способ получить данные внутри вложенной структуры - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть структура, которая выглядит следующим образом:

&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)

Но он не поддерживается.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...