hello,大家好,我是聪聪。
Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性:
JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息Viper能够帮助我们执行以下操作:
查找、加载和反序列化JSON、TOML、YAML、HCL、INI、envfile和Java properties格式的配置文件。
提供一种机制为你的不同配置选项设置默认值,进行灵活配置和发布配置。
提供一种机制来通过命令行参数覆盖指定选项的值。
提供别名系统,以便在不破坏现有代码的情况下轻松重命名参数。
当用户提供了与默认值相同的命令行或配置文件时,可以很容易地分辨出它们之间的区别。
Viper能够按照下列优先级进行获取配置:
Set设置值go get github.com/spf13/viper
Viper支持设置默认值,当我们无法从配置文件、环境变量、远程配置、命令行获取配置时,默认配置到是很有用的。
func main() {
//设置各类key对应默认值
//key 为string类型
//value可接受interface{} 类型参数
viper.SetDefault("rootPath", "rootPath default value")
viper.SetDefault("defaultPort", 8000)
viper.SetDefault("defaultConfig", map[string]string{
"HttpMethod": "HttpMethod default value",
"HttpUrl": "HttpUrl default value",
})
//从viper中读取配置
fmt.Println("rootPath value:", viper.Get("rootPath"))
fmt.Println("defaultPort value:", viper.Get("defaultPort"))
fmt.Println("defaultConfig:", viper.Get("defaultConfig"))
fmt.Println("defaultConfig:", viper.GetStringMapString("defaultConfig"))
}
从Viper中读取配置key对应配置信息。打印信息如下:
rootPath value: rootPath default value
defaultPort value: 8000
defaultConfig: map[httpMethod:GET httpUrl:ccoder.cc]
defaultConfig: map[httpMethod:GET httpUrl:ccoder.cc]
Viper读取配置文件时,需要指定告诉配置文件路径(或者读取配置方式)。同时Viper支持从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息。同时支持搜索多个路径。
下面是一个从配置文件config.json 读取配置的案例。只用指定配置文件config预期出现的路径,无需指定特定的路径。
//在当前工作目录 . 中读取一个config的配置文件 未指定文件后缀.
func printFile() {
//配置文件名称(无后缀扩展名),viper会自行解析文件后缀名.
//若配置文件无后缀时则需要通过SetConfigType配置后水名
viper.SetConfigName("config")
//可以重复添加的搜索路径
viper.AddConfigPath(".")
//加载配置文件 捕获一下error:文件不存在情况。
err := viper.ReadInConfig()
if err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
log.Println("config not exists")
} else {
log.Println("read config error")
}
log.Fatal