1
我使用的是優秀的毒蛇庫從這裏:https://github.com/spf13/viper閱讀地圖與Golang蝰蛇片
我想在鹽酸一個配置文件讀取(雖然它可能是一個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"
}
}
}
}
}
}
}
}
}
當我使用反射時,它似乎是slice類型。我需要將它投射到切片上嗎?我怎麼做?有沒有更簡單的方法來管理這樣的數據結構?
我完全新的golang,所以請去容易對我:)
一旦Unmarshalled,值是如何提供的? – jaxxstorm
我得到錯誤'undefined:grope' for this – jaxxstorm
values can be available as interv:= C.interval or in for loop for grp:= range C.groups {for trg:= range grp {...}}錯誤很可能是因爲拼寫錯誤而導致的。 – Uvelichitel