go - 使用 viper 定义 golang 程序配置时使用最大精度
问题描述
我想用以下要求初始化我的应用程序的配置,即优先级
- 命令标志
- 环境变量
- 配置文件
- 默认值
但是,我想要以下信息的单一事实:
- 每个配置变量的名称
- 它的类型
- 关于标志的帮助信息
- 它的默认值
我能想到的最接近的是以下结构:
// 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
在这一行中硬编码(除了我的defaults
结构)
有没有办法viper
获得一个单一的事实点(无论是地图还是结构)来提供默认值的创建以及与每个配置变量相对应的标志?
解决方案
推荐阅读
- ios - 如何检测我的应用程序的 vpn 是否在 iOS 中连接?
- c# - 如何在 DynamoDB 中存储 .Net MemorySteam 值?
- javascript - 我可以在 apollo 客户端的错误链接中调用 graphql 突变吗
- authorization - fastapi swagger 不发送带有 url 的令牌
- jmeter - 为不同的操作运行线程组
- rpa - 在 Intellibot Studio 中使用 readfromexcel 组件时出错
- python-2.7 - 在 python 2.7 中相互减去两个日期时间并返回 HH:MM:SS
- ionic4 - ionic 4 ng-true-value equivalence
- node.js - 如何在 Node js 中的异步和等待函数中创建对象?
- ios - 从 SwiftUI CoreData 视图返回计数