我有一个像下面这样的 YAML。
connections:
- name: demo
hosts:
- demo.example.com:9200
username: admin
password: password
ssl: true
ssl_verify: true
version: 7
- name: test
hosts:
- "test.example.com:9200"
username: admin
password: password
Run Code Online (Sandbox Code Playgroud)
如您所见ssl,ssl_verify并且未在列表的第二项中设置。我希望它们默认为true,但是,它没有发生。我尝试了不同的解决方案。
viper.SetDefault("connections[].ssl", "true")
Run Code Online (Sandbox Code Playgroud)
type Config struct {
Connections []struct {
Name string
Hosts []string
Username string
Password string
Ssl bool `default:"true"`
SslVerify bool `default:"true"`
Version int
}
}
...
err := defaults.Set(config)
Run Code Online (Sandbox Code Playgroud)
手动循环遍历结构列表。虽然这些方法适用于字符串,但它不适用于布尔值,因为它们false在解组后已经初始化,我们不确定是否false由用户输入。
使用带有布尔值的指针。这是因为未初始化的值等于 …