如何解组毒蛇配置以连字符

时间:2018-07-08 02:35:48

标签: go viper-go go-cobra

我将以下以下配置文件定义为toml文件:

[staging]
project-id = "projectId"
cluster-name = "cluster"
zone = "asia-southeast1-a"

然后,我有这个结构

type ConfigureOpts struct {
    GCPProjectID       string `json:"project-id"`
    ClusterName        string `json:"cluster-name"`
    Zone               string `json:"zone"`
}

请注意,我的ConfigureOpts字段名格式与配置文件中定义的格式不同。

我已经尝试过此代码,但是失败了

test_opts := ConfigureOpts{}
fmt.Printf("viper.staging value %+v\n", viper.GetStringMap("staging"))
viper.UnmarshalKey("staging", &test_opts)
fmt.Printf("testUnmarshall %+v\n", test_opts)

这是输出

viper.staging value map[zone:asia-southeast1-a project-id:projectId cluster-name:cluster]

testUnmarshall {GCPProjectID: ClusterName: Zone:asia-southeast1-a AuthMode: AuthServiceAccount:}

1 个答案:

答案 0 :(得分:3)

基于此参考文献https://github.com/spf13/viper/issues/258

,我得到了答案

因此解决方案是将json:结构中的任何ConfigureOpts标记更改为mapstructure:

所以这可以解决问题。

type ConfigureOpts struct {
    GCPProjectID       string `mapstructure:"project-id"`
    ClusterName        string `mapstructure:"cluster-name"`
    Zone               string `mapstructure:"zone"`
}