Функция не распознает вложенную структуру Yaml - PullRequest
0 голосов
/ 20 января 2020

У меня есть следующая структура YAML:

type YamlConfig struct {
    Items struct {
        RiskyRoles []struct {
            Name string `yaml:"name"`
            Rules []struct{
                Verbs []string `yaml:"verbs"`
                ResourceOperator string `yaml:"resourcesOperator"`
                Resources []string `yaml:"resources"`
            }
        } `yaml:"RiskyRoles"`
    } `yaml:"Items"`
}  

У меня есть функция, которая анализирует файл YAML для объекта, а затем я хочу отправить объект структуры Rules в функцию с именем DoingStuff(..) :

yamlFile, err := ioutil.ReadFile("actionItems.yaml")
if err != nil {
    fmt.Printf("Error reading YAML file: %s\n", err)
} else{
    var yamlConfig YamlConfig
    err = yaml.Unmarshal(yamlFile, &yamlConfig)
    if err != nil {
        fmt.Printf("Error parsing YAML file: %s\n", err)
    }

    for _, yamlRole := range yamlConfig.Items.RiskyRoles{
       DoingStuff(yamlRole.Rules)
    }
}

Но внутри функции DoingStuff объект структуры Rules не распознается:

func DoingStuff(yamlRules []struct{}) {
  // Not recognize ****
  for _, rule := range yamlRules {
      fmt.Print(rule.ResourceOperator)
  }
}

Как преобразовать его в:

Rules []struct{
    Verbs []string `yaml:"verbs"`
    ResourceOperator string `yaml:"resourcesOperator"`
    Resources []string `yaml:"resources"`
}

Должен ли я снова объявить эту структуру? Или приведение с использованием интерфейсов?

РЕДАКТИРОВАТЬ:

Я добавил новую структуру и использовал ее в структуре YamlConfig, но при синтаксическом анализе не удалось проанализировать правила:

type RulesStruct struct {
    Rules []struct{
        Verbs []string `yaml:"verbs"`
        ResourceOperator string `yaml:"resourcesOperator"`
        Resources []string `yaml:"resources"`
    }
}
type YamlConfig struct {
    Items struct {
        RiskyRoles []struct {
            Name string `yaml:"name"`
            Message string `yaml:"message"`
            Priority string `yaml:"priority"`
            Rules []RulesStruct
        } `yaml:"RiskyRoles"`
    } `yaml:"Items"`
}

1 Ответ

1 голос
/ 20 января 2020

Благодаря помощи @mkporiva я изменил структуру следующим образом:

type RulesStruct struct {

    Verbs []string `yaml:"verbs"`
    ResourceOperator string `yaml:"resourcesOperator"`
    Resources []string `yaml:"resources"`

}

type YamlConfig struct {
    Items struct {
        RiskyRoles []struct {
            Name string `yaml:"name"`
            Message string `yaml:"message"`
            Priority string `yaml:"priority"`
            Rules []RulesStruct
        } `yaml:"RiskyRoles"`
    } `yaml:"Items"`
}  

Теперь все работает нормально.

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