这是我参加「第三届青训营 –后端场」笔记创造活动的第2篇笔记
一、Viper 是什么?
Viper 是应用程序的完好装备的管理工具,用于在应用程序中工作,能够处理一切类型的装备需求和格局。
二、装置 Viper
go get github.com/spf13/viper
三、Viper 有什么效果
- 设置默认值
- 读取 JSON、TOML、YAML(YML)、HCL、envfile 和 Java properties 属性装备文件
- 实时查看和重读装备文件(可选)
- 从环境变量中读取
- 从长途装备系统(etcd 或 Consor)读取数据,并观察改变
- 从命令行标志读取
- 从缓冲区读取
- 设置显式值
四、Viper demo 可供参考
func main() {
ReadIni()
ReadYml()
}
func ReadIni() {
v := viper.New()
v.AddConfigPath("./conf") // 途径(当前途径下的conf文件夹)
v.SetConfigName("configA") // 名称
v.SetConfigType("ini") // 类型
err := v.ReadInConfig() // 读装备
if err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
fmt.Println("找不到装备文件..")
} else {
fmt.Println("装备文件犯错..")
}
}
// [section] 假如没写就是 default,也就是下面的 key 变成 default.username
s1 := v.GetString("db.username")
s2 := v.GetInt("web.port")
fmt.Printf("ini 文件的数据库姓名:%v, 网络端口号:%v \n", s1, s2)
}
func ReadYml() {
v := viper.New()
v.AddConfigPath("./conf")
v.SetConfigName("configB")
v.SetConfigType("yml")
err := v.ReadInConfig()
if err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
fmt.Println("找不到装备文件..")
} else {
fmt.Println("装备文件犯错..")
}
}
s1 := v.GetString("db.username")
s2 := v.GetInt("web.port")
s3 := v.GetString("app.time")
fmt.Printf("yml 文件的数据库姓名:%v, 网络端口号:%v, apptime:%v \n", s1, s2, s3)
}
结果:
ini 文件的数据库姓名:admin, 网络端口号:8080
yml 文件的数据库姓名:root, 网络端口号:8088, apptime:05/30
装备文件内容
- configA.ini
;数据库装备
[db]
username=admin
password=123
driver=mysql
port=3306
;网络装备
[web]
port=8080
- configB.yml
# 数据库装备
db:
username: root
password: 123
driver: mysql
port: 3306
# 网络装备
web:
port: 8088
# APP装备
app: {id: 10,time: 05/30}
注意
以上比方在根目录下面创建了 conf 文件夹,然后创建了 configA.ini 和 configB.yml 文件
五、总结
运用 viper 能够很好的去管理你的装备文件信息,比方数据库的账号密码,服务器监听的端口,你能够经过更改装备文件去更改这些内容,而不必定位到那一段代码上去,提高了开发效率。
需求注意的是,你还需求补充装备文件的格局相关的常识,才能更好的去运用它。