1. Viper简介
Viper是适用于Go应用程序(包括Twelve-Factor App)的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性:
- 设置默认值
- 从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息
- 实时监控和重新读取配置文件(可选)
- 从环境变量中读取 从远程配置系统(etcd或Consul)
- 读取并监控配置变化 从命令行参数读取配置
- 从buffer读取配置
- 显式配置值
Viper能够为你执行下列操作:
- 查找、加载和反序列化JSON、TOML、YAML、HCL、INI、envfile和Java properties格式的配置文件。
- 提供一种机制为你的不同配置选项设置默认值。
- 提供一种机制来通过命令行参数覆盖指定选项的值。
- 提供别名系统,以便在不破坏现有代码的情况下轻松重命名参数。
- 当用户提供了与默认值相同的命令行或配置文件时,可以很容易地分辨出它们之间的区别。
Viper会按照下面的优先级。每个项目的优先级都高于它下面的项目:
- 显示调用Set设置值
- 命令行参数(flag)
- 环境变量
- 配置文件
- key/value存储
- 默认值
重要: 目前Viper配置的键(Key)是大小写不敏感的。目前Viper正在讨论是否将这一选项设为可选。
2. Viper案例
vp := viper.New() //创建vipe示例
vp.SetConfigName(configName) //指定配置文件名(无扩展名)
vp.AutomaticEnv() /*调用时,Viper会在发出viper.Get请求时随时检查环境变量。它将应用以下规则。
它将检查环境变量的名称是否与键匹配(如果设置了EnvPrefix)。*/
for _, configPath := range configPaths {
vp.AddConfigPath(configPath) //配置文件路径
}
if err := vp.ReadInConfig(); err != nil {
return errs.WithInternalError(err)
}
err := vp.Unmarshal(config) //将vp读到的结果解析到struct中。
if err != nil {
return errs.WithInternalError(err)
}