在嵌套结构中获取数据的简便方法

时间:2018-12-21 13:09:44

标签: go struct

我有一个看起来像这样的结构:

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

但是它没有得到维护。

谢谢。

0 个答案:

没有答案