1.Viper 是什么?
viper 是以个完善的go语言配置包.开发它的目的是来处理各种格式的配置文件信息.
viper 支持:
- 设置默认配置
- 支持读取JSON TOML YAML HCL 和Java属性配置文件
- (可选)监听配置文件变化,实时读取读取配置文件内容
- 读取环境变量值
- 读取远程配置系统(etcd Consul)和监控配置变化
- 读取命令哈Flag值
- 读取buffer值
- 读取确切值
2.为什么要使用 Viper?
当你创建app的时候需要关注怎么创建完美的app,而不需要关注怎么写配置文件.
viper 能够帮你做这些事情
- 找到和反序列化JSON TOML YAML HCL JAVA配置文件
- 提供一个配置文件默认值和可选值的机制
- 提供重写配置值和Flag的可选值
- 提供系统的参数别名,解决对以有代码的侵入
- 轻松的辨别出用户输入值还是配置文件值
viper 配置项key是大写不敏感的
3.Viper 基本用法
package main import ( "fmt" "github.com/spf13/viper" "log" ) func init() { viper.SetConfigName("config") //指定配置文件的文件名称(不需要制定配置文件的扩展名) //viper.AddConfigPath("/etc/appname/") //设置配置文件的搜索目录 //viper.AddConfigPath("$HOME/.appname") // 设置配置文件的搜索目录 viper.AddConfigPath(".") // 设置配置文件和可执行二进制文件在用一个目录 err := viper.ReadInConfig() // 根据以上配置读取加载配置文件 if err != nil { log.Fatal(err)// 读取配置文件失败致命错误 } } func main() { fmt.Println("获取配置文件的string",viper.GetString(`app.name`)) fmt.Println("获取配置文件的string",viper.GetInt(`app.foo`)) fmt.Println("获取配置文件的string",viper.GetBool(`app.bar`)) fmt.Println("获取配置文件的map[string]string",viper.GetStringMapString(`app`)) }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package main
import (
"fmt"
"github.com/spf13/viper"
"log"
)
func init() {
viper.SetConfigName("config") //指定配置文件的文件名称(不需要制定配置文件的扩展名)
//viper.AddConfigPath("/etc/appname/") //设置配置文件的搜索目录
//viper.AddConfigPath("$HOME/.appname") // 设置配置文件的搜索目录
viper.AddConfigPath(".") // 设置配置文件和可执行二进制文件在用一个目录
err := viper.ReadInConfig() // 根据以上配置读取加载配置文件
if err != nil {
log.Fatal(err)// 读取配置文件失败致命错误
}
}
func main() {
fmt.Println("获取配置文件的string",viper.GetString(`app.name`))
fmt.Println("获取配置文件的string",viper.GetInt(`app.foo`))
fmt.Println("获取配置文件的string",viper.GetBool(`app.bar`))
fmt.Println("获取配置文件的map[string]string",viper.GetStringMapString(`app`))
}
|
代码详解
viper.SetConfigName("config")
设置配置文件名为config, 不需要配置文件扩展名, 配置文件的类型 viper会自动根据扩展名自动匹配.viper.AddConfigPath(".")
设置配置文件搜索的目录,.
表示和当前编译好的二进制文件在同一个目录. 可以添加多个配置文件目录,如在第一个目录中找到就不不继续到其他目录中查找.viper.ReadInConfig()
加载配置文件内容viper.Get***
获取配置文件中配置项的信息
4.viper 高级用法
4.1 viper设置配置项的默认值
默认值不是必须的,如果配置文件、环境变量、远程配置系统、命令行参数、Set函数都没有指定时,默认值将起作用. 例子:
viper.SetDefault("ContentDir", "content") viper.SetDefault("LayoutDir", "layouts") viper.SetDefault("Taxonomies", map[string]string{"tag": "tags", "category": "categories"}) Reading Config Files
1
|