使用viper定义golang程序配置时使用最大精度
我想用以下要求初始化我的应用程序配置,即优先级使用viper定义golang程序配置时使用最大精度,go,configuration,Go,Configuration,我想用以下要求初始化我的应用程序配置,即优先级 cmd标志 环境变量 配置文件 默认值 但是,我希望以下信息有一点真实性: 每个配置变量的名称 其类型 当涉及到标志时,它会显示帮助消息 它的默认值 我能想到的最接近的结构是以下结构: // the name of the configuration variables const ( apiHost = "APIHost" apiPort = "APIPort&
- cmd标志
- 环境变量
- 配置文件
- 默认值
- 每个配置变量的名称
- 其类型
- 当涉及到标志时,它会显示帮助消息
- 它的默认值
// the name of the configuration variables
const (
apiHost = "APIHost"
apiPort = "APIPort"
readTimeout = "ReadTimeout"
)
var defaults = map[string]interface{}{
apiHost: "0.0.0.0",
apiPort: 3000,
readTimeout: 5 * time.Second,
}
// within a func
for k, v := range defaults {
viper.SetDefault(k, v)
}
然而,问题是(暂时将帮助消息放在一边),由于无法使用映射索引表达式,我无法利用上述结构来创建一致的标志
pflag.Int(apiHost, int(defaults[apiPort]), "help message for flagname") // errors out
上面的“强迫”我在另一个地方定义apiPort
的默认值,因为我想我也必须在这一行中硬编码3000
(除了我的默认值
结构)
在viper
中有没有一种方法可以让一个真实点(无论这是一个映射还是一个结构)来创建默认值以及对应于每个配置变量的标志