Viper解析以及如何进行加载配置
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这期内容当中小编将会给大家带来有关Viper解析以及如何进行加载配置,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Viper解析&加载配置1 Viper是什么Vip
千家信息网最后更新 2024年11月23日Viper解析以及如何进行加载配置
这期内容当中小编将会给大家带来有关Viper解析以及如何进行加载配置,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
Viper解析&加载配置
1 Viper是什么
Viper是一个方便Go语言应用程序处理配置信息的库。它可以处理多种格式的配置。它支持的特性:
设置默认值
从JSON、TOML、YAML、HCL和Java properties文件中读取配置数据
可以监视配置文件的变动、重新读取配置文件
从环境变量中读取配置数据
从远端配置系统中读取数据,并监视它们(比如etcd、Consul)
从命令参数中读物配置
从buffer中读取
调用函数设置配置信息
2 安装viper
go get github.com/spf13/viper
在go的根目录下 新建 web/config目录 ,目录参考: /usr/local/go/web/config
3 Viper在Go项目中如何使用
在 config目录中,新建 config.yaml (配置)文件,内容如下:
common: database: name: test host: 127.0.0.1
3.1 在config目录中,新建 config.go (获取配置)文件,内容如下
package configimport ( "fmt" "github.com/spf13/viper")func Init() (interface{},error) { //模块中供其他包调用的方法,首字母必须大写 //viper设置 配置 viper.Set("name","abc") fmt.Printf("name的值是%v\n",viper.GetString("name") ) //读取配置文件配置 viper.AddConfigPath("config") viper.SetConfigName("config") error := viper.ReadInConfig() /* 代码解析: viper.AddConfigPath("conf")用来指定yaml配置文件的路径 viper.SetConfigName("config")用来指定配置文件的名称 viper.ReadInConfig()是解析配置文件的函数,如果配置文件的路径错误获名称错误则解析失败,会报错误 viper.GetString("database.name")是用来从配置文件中根据层级关系来获取数据 最后,通过fmt.Println()对数据结果进行输出 */ if(error != nil){ panic(error) } c := viper.AllSettings() //获取所有配置 return c,nil}//获取数据库配置信息func GetDatabaseInfo() map[string]interface{} { //模块中供其他包调用的方法,首字母必须大写 return viper.GetStringMap("common.database")}//获取环境变量func GetEnvInfo(env string) string { viper.AutomaticEnv() return viper.GetString(env)}
3.2 web目录中,新建 testviper.go (加载配置)文件,内容如下:
package mainimport ( "fmt" "web/config")func main() { vipConfig,error := config.Init() //vipConfig是配置 fmt.Printf("config.init error是%v\n", error) //fmt.Printf("config.init vipConfig是%v\n",vipConfig,) database := config.GetDatabaseInfo() fmt.Printf("直接获取common[database]配置是%v\n", database) fmt.Printf("直接获取common[database][host]配置是%v\n", database["host"]) //因为我们不知道 vipConfig 的下级是什么类型的数据,所以这里使用了interface{} //因此所有的类型、任意动态的内容都可以解析成 interface{}。 for key,val := range vipConfig.(map[string]interface{}){ //循环接口类型,获取配置信息 fmt.Printf("vipConfig 的key是%v val是%v\n",key,val ) switch val.(type) { //判断val的类型 case map[string]interface{}: //如果是 interface接口类型 for ke,va := rangeval.(map[string]interface{}){ //循环接口类型,获取配置信息 fmt.Printf("vipConfig 的ke是%v va是%v\n",ke,va ) switch va.(type) { //判断va的类型 case map[string]interface{}: //如果是 interface接口类型 for k,v := range va.(map[string]interface{}){ //循环接口类型,获取配置信息 fmt.Printf("vipConfig 的k是%v v是%v\n",k,v ) } } } } } //viper可以获取服务器的环境变量 GO111MODULE := config.GetEnvInfo("GO111MODULE") fmt.Printf("GO111MODULE的值是%v\n",GO111MODULE)}
3.3 使用 go run testviper.go 运行该文件即可
[root@localhost web]# go run testviper.goname的值是abcconfig.init error是直接获取common[database]配置是map[host:[127.0.0.1] name:[test]]直接获取common[database][host]配置是[127.0.0.1]vipConfig 的key是common val是map[database:map[host:127.0.0.1 name:test]]vipConfig 的ke是database va是map[host:127.0.0.1 name:test]vipConfig 的k是name v是testvipConfig 的k是host v是127.0.0.1vipConfig 的key是nameval是abcGOROOT的值是on
viper支持的加载配置文件类型很多,我们从配置文件读取或者获取相关需要的数据信息,根据文件后缀名查询分割相关的配置文件类型指定操作配置的后缀名指定。
上述就是小编为大家分享的Viper解析以及如何进行加载配置了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
配置
文件
类型
数据
信息
内容
接口
目录
变量
环境
错误
循环
函数
名称
后缀
大写
字母
方法
模块
路径
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器远程端口怎么用
做单片机软件开发怎么样
数据库安全问题怎解决
互联网科技技术服务
校园网络安全的主要内容
服务器硬盘亮黄灯原因
网络安全行为红线公安
数据库夜背景的图是什么东西
服务器容易中的病毒
搭建个人游戏服务器
数字签名是网络安全技术吗
服务器 销售
我的世界网易版EC服务器所有礼盒
it软件开发用什么开发
京东2005年用的服务器
饥荒怎么购买专用服务器
完美世界社区服务器的指令
谷歌数据库管理员职务编号
邹平应用软件开发服务
药品bcs分类查询数据库
学生网络安全防护
数据库ch3
青岛苹果软件开发
企业软件开发岗
一个软件怎么开发数据库
滁州h3c塔式服务器哪家好
本科软件开发员工资多少
湿地普查数据库标准2020
5g移动通讯网络技术的优点
萧萧软件开发