我有以下yml文件:
# config.yml
items:
name-of-item: # dynamic field
source: ...
destination: ...
我想使用毒蛇来解析它,但是name-of-item
可以是任何东西,因此我不确定如何解决。我知道我可以使用以下内容:
// inside config folder
package config
type Items struct {
NameOfItem NameOfItem
}
type NameOfItem struct {
Source string
Destination string
}
// inside main.go
package main
import (
"github.com/spf13/viper"
"log"
"github.com/username/lib/config"
)
func main() {
viper.SetConfigName("config.yml")
viper.AddConfigPath(".")
var configuration config.Item
if err := viper.ReadInConfig(); err != nil {
log.Fatalf("Error reading config file, %s", err)
}
err := viper.Unmarshal(&configuration)
if err != nil {
log.Fatalf("unable to decode into struct, %v", err)
}
}
在这种情况下,因为我声明了NameOfItem
,所以我可以取消编组,但是如果我不知道字段名称(或者,如果它是动态的),该怎么办?>
答案 0 :(得分:1)
Go中的struct
类型可能不是动态的(我怀疑它们可能是任何其他严格类型的语言),因此您必须使用两个阶段的过程:
map[string]interface{}
的值。但是您的问题尚不清楚,您的YAML数据是否真的是任意的,或者items
键是否包含 uniform 项数组-我的意思是,每个项都由{{1 }}和source
值,只是项本身的键未知。
在后一种情况下,解压缩destination
件的目标应该是地图-类似于
items