1. Viper简介

Viper是适用于Go应用程序(包括Twelve-Factor App)的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性:

  • 设置默认值
  • 从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息
  • 实时监控和重新读取配置文件(可选)
  • 从环境变量中读取 从远程配置系统(etcd或Consul)
  • 读取并监控配置变化 从命令行参数读取配置
  • 从buffer读取配置
  • 显式配置值

Viper能够为你执行下列操作:

  1. 查找、加载和反序列化JSON、TOML、YAML、HCL、INI、envfile和Java properties格式的配置文件。
  2. 提供一种机制为你的不同配置选项设置默认值。
  3. 提供一种机制来通过命令行参数覆盖指定选项的值。
  4. 提供别名系统,以便在不破坏现有代码的情况下轻松重命名参数。
  5. 当用户提供了与默认值相同的命令行或配置文件时,可以很容易地分辨出它们之间的区别。

Viper会按照下面的优先级。每个项目的优先级都高于它下面的项目:

  1. 显示调用Set设置值
  2. 命令行参数(flag)
  3. 环境变量
  4. 配置文件
  5. key/value存储
  6. 默认值

重要: 目前Viper配置的键(Key)是大小写不敏感的。目前Viper正在讨论是否将这一选项设为可选。

2. Viper案例

  1. vp := viper.New() //创建vipe示例
  2. vp.SetConfigName(configName) //指定配置文件名(无扩展名)
  3. vp.AutomaticEnv() /*调用时,Viper会在发出viper.Get请求时随时检查环境变量。它将应用以下规则。
  4. 它将检查环境变量的名称是否与键匹配(如果设置了EnvPrefix)。*/
  5. for _, configPath := range configPaths {
  6. vp.AddConfigPath(configPath) //配置文件路径
  7. }
  8. if err := vp.ReadInConfig(); err != nil {
  9. return errs.WithInternalError(err)
  10. }
  11. err := vp.Unmarshal(config) //将vp读到的结果解析到struct中。
  12. if err != nil {
  13. return errs.WithInternalError(err)
  14. }

3. 更多

https://blog.csdn.net/qq_41004932/article/details/119670235