使用viper管理配置
- 支持多种配置文件格式,包括 JSON,TOML,YAML,HECL,envfile,甚至还包括Java properties
- 支持为配置项设置默认值
- 可以通过命令行参数覆盖指定的配置项
- 支持参数别名
viper按照这个优先级(从高到低)获取配置项的取值:
- explicit call to Set: 在代码逻辑中通过viper.Set()直接设置配置项的值
- flag:命令行参数
- env:环境变量
- config:配置文件
- key/value store:etcd或者consul
- default:默认值
按照这个优先级(从高到低)获取配置项的取值:
- explicit call to Set: 在代码逻辑中通过viper.Set()直接设置配置项的值
- flag:命令行参数
- env:环境变量
- config:配置文件
- key/value store:etcd或者consul
- default:默认值
优先级
验证一下 viper.Set() 的优先级高于 配置文件
输出:
到底用的是哪个配置文件: '/Users/fliter/config-demo/cui-config.yaml'
Global.Source这个字段的值为: '优先级最高'
验证一下 环境变量 的优先级高于 配置文件
viper.AutomaticEnv()会绑定所有环境变量,
如果只希望绑定特定的,可以使用SetEnvPrefix("global.source", "MYAPP_GLOAL_SOURCE"),注意这个函数不会自动加上MYAPP的前缀.
验证一下 命令行参数的优先级高于 配置文件
viper可以配合pflag来使用,pflag可以理解为标准库flag的一个增强版,viper可以绑定到pflag上
和cobra,viper一样,pflag也是同一作者的作品
验证一下 默认值的优先级低于 配置文件
Watch机制(配置更新后 热加载)
该机制可以监听配置文件的修改, 这样就实现了热加载,修改配置后,无需重启服务
fsnotify
configor
Configor: 一个Golang配置工具,支持YAML,JSON,TOML,Shell环境,支持热加载
开启 测试模式 or 详细模式
err := configor.New(&configor.Config{Debug: true}).Load(&conf, "config.yml")
CONFIGOR_DEBUG_MODE=true go run main.go