当我使用Unmarshalviper 的方法用 yaml 文件中的值填充我的配置结构时,一些结构字段变成了空!我这样做:viper.SetConfigType("yaml")viper.SetConfigName("config")viper.AddConfigPath("/etc/myapp/")viper.AddConfigPath(".")err := viper.ReadInConfig()// error checking ...conf := &ConfYaml{}err = viper.Unmarshal(conf)// error checking ...我的结构是这样的:type ConfYaml struct { Endpoints SectionStorageEndpoint `yaml:"endpoints"`}type SectionStorageEndpoint struct { URL string `yaml:"url"` AccessKey string `yaml:"access_key"` SecretKey string `yaml:"secret_key"` UseSSL bool `yaml:"use_ssl"` Location string `yaml:"location"`}这里url和location字段在 yaml 文件中填充了正确的值,但其他字段为空!很想知道当我尝试打印如下字段时:viper.Get("endpoints.access_key")它在 yaml 文件中打印正确的值并且不为空!
1 回答
SMILET
TA贡献1796条经验 获得超4个赞
终于找到了解决方案,更改yaml:
标签mapstructure:
即可解决问题。
看来 viper 无法解组我的.yaml
文件中没有相同键名的字段。就像问题中的access_key
and一样,导致结构体字段位于 where和。secret_key
AccessKey
SecretKey
location
但是像和that这样的字段url
在结构体和文件中具有相同的名称.yaml
,并且没有问题。
正如这个问题所说:
问题是
viper
使用 MapStructure 包将配置映射解组到结构。它不支持 yaml 包使用的 yaml 标签。
因此,更改yaml:
标签中的 即可mapstructure:
解决问题。
- 1 回答
- 0 关注
- 166 浏览
添加回答
举报
0/150
提交
取消