1

当我使用UnmarshalViper 的方法用 Yaml 文件中的值填充我的结构时,所有结构文件仍然是空的,我搜索了很多解决方案,但它们都没有工作:(

我尝试将标签更改mapstructureyamland structure,仍然没有工作...

main.go:

type Test struct {
    T TConfig `mapstructure:"apiserver"`
}

type TConfig struct {
    Address int `mapstructure:"host"`
    Port    int `mapstructure:"port"`
}
func main() {
    var aaa *Test
    viper.AutomaticEnv()
    viper.AddConfigPath("./")
    viper.SetConfigName("config")
    if err := viper.ReadInConfig(); err != nil {
        panic(err)
    }
    if err := viper.Unmarshal(&aaa); err != nil {
        fmt.Println("read config error:", err)
    }
    fmt.Println("config:", aaa)
}

配置.yml:

apiserver:
  - host: localhost
  - port: 8080

输出:

read config error: 1 error(s) decoding:

* 'apiserver' expected a map, got 'slice'
config: <nil>

请有人帮我修复错误!

4

1 回答 1

1

删除配置文件中的破折号。这表示一个数组或值切片。

这应该有效:

apiserver:
  host: localhost
  port: 8080

此外,您将 Address 设置为 int 值;在配置文件中它是一个字符串:“localhost”。

于 2022-02-07T19:12:44.117 回答