【发布时间】:2016-12-21 16:33:13
【问题描述】:
我正在使用这里的优秀 viper 库:https://github.com/spf13/viper
我正在尝试读取 hcl 中的配置文件(尽管它也可能是 JSOn 或 YAML 文件),如下所示:
interval = 10
statsd_prefix = "pinger"
group "dns" {
target_prefix = "ping"
target "dns" {
hosts = [
"dnsserver1",
"dnsserver2"
]
}
}
到目前为止,我的代码如下所示:
viper.SetConfigName("config")
viper.AddConfigPath(".")
err := viper.ReadInConfig()
if err != nil {
panic(fmt.Errorf("Fatal error config file: %s \n", err))
}
interval := viper.GetInt("interval")
prefix := viper.GetString("statsd_prefix")
groups := viper.GetStringMap("group")
fmt.Println(interval)
fmt.Println(prefix)
我遇到的最大问题是组选项。这可以是多个不同的组。
当我使用viper.GetStringMap 读取它时,它似乎不起作用,所以我使用了标准的viper.Get 函数。转储时生成的结构如下所示:
([]map[string]interface {}) (len=1 cap=1) {
(map[string]interface {}) (len=1) {
(string) (len=3) "dns": ([]map[string]interface {}) (len=1 cap=2) {
(map[string]interface {}) (len=2) {
(string) (len=13) "target_prefix": (string) (len=4) "ping",
(string) (len=6) "target": ([]map[string]interface {}) (len=1 cap=1) {
(map[string]interface {}) (len=1) {
(string) (len=8) "dns": ([]map[string]interface {}) (len=1 cap=1) {
(map[string]interface {}) (len=1) {
(string) (len=5) "hosts": ([]interface {}) (len=2 cap=2) {
(string) (len=18) "dnsserver1",
(string) (len=18) "dnsserver2"
}
}
}
}
}
}
}
}
}
当我使用反射时,它似乎是切片类型。我需要把它切成一片吗?我怎么做?有没有更简单的方法来管理这样的数据结构?
我是 golang 的新手,所以请放轻松:)
【问题讨论】:
标签: go