viper是什么
viper是Go应用、12-Factor应用的配置解决方案。它被用在应用之中,可以处理几乎所有的配置需求和格式,支持:
- 默认配置
- 从JSON、TOML、YAML、HCL和Java配置中读取
- 监听重载配置文件(可选功能)
- 读取环境变量
- 读取远程配置吸引,如etcd或者Consul,监听这些的变化
- 从命令行的flag读取
- 从缓存读取
- 设置明确值
当我们在创建现代化的应用时,我们不需要担心配置文件格式的问题,viper都能解决:
- 从JSON、TOML、YAML、HCL和Java配置中查找,加载和序列化
- 可以为不同的配置文件设置不同的默认值
- 可以通过命令行的flags方式设置覆盖值
- 可以在不修改代码的情况下,设置相等值来把参数重命名
- 能分辨命令行提供的参数和配置文件默认参数的不同
以下从这个几个方面来详细了解viper:
- set
- flag
- env
- config
- key/value store
- default
使用
设置默认值
1 | viper.SetDefault("ContentDir", "content") |
从配置文件读取
使用viper来读取文件,需要提供文件的路径(可以设置多个路径),如下:1
2
3
4
5
6
7
8viper.SetConfigName("config") // name of config file (without extension)
viper.AddConfigPath("/etc/appname/") // path to look for the config file in
viper.AddConfigPath("$HOME/.appname") // call multiple times to add many search paths
viper.AddConfigPath(".") // optionally look for config in the working directory
err := viper.ReadInConfig() // Find and read the config file
if err != nil { // Handle errors reading the config file
panic(fmt.Errorf("Fatal error config file: %s \n", err))
}
监听重新读取配置文件
应用不需要重启,当配置文件出现改动时,就会自动去重新读取文件:
1 | viper.WatchConfig() |
参考: