Viper解析以及如何进行加载配置
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这期内容当中小编将会给大家带来有关Viper解析以及如何进行加载配置,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Viper解析&加载配置1 Viper是什么Vip
千家信息网最后更新 2025年12月02日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安全错误
数据库的锁怎样保障安全
邵阳软件开发职高
网络安全预防诈骗手抄报初中
我的世界服务器不安全账号
剑网三导出数据库
浙江无线网络技术包括什么
软件开发详细完整流程
安全狗linux服务器
数据库课程评价
服务器进程启动器停用
sql数据库实体是什么
服务器连接密码忘了怎么办
计算设备数据的软件开发
我的世界网易版枪战生存服务器
连入网络安全密钥
财务报表不能连接服务器怎么回事
南京学习网络安全的学校
节假网络安全工作总结
护苗网络安全课堂乡村行湖北
保护软件开发的知识产权
航天二院网络安全形势
农行成都软件开发中心待遇
北京软件开发岗
建立数据库的外键
中金数据库技术
考网络技术还是python
热血传奇新服务器怎么玩
梦幻西游如何查看服务器人数
寺庙网络安全隐患排查报告
数据库 预留字段
长沙市盈进高网络技术有限公司