Viper解析以及如何进行加载配置
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这期内容当中小编将会给大家带来有关Viper解析以及如何进行加载配置,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Viper解析&加载配置1 Viper是什么Vip
千家信息网最后更新 2025年01月24日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安全错误
数据库的锁怎样保障安全
avx指令集服务器
下列哪一列不属于网络安全法
软件开发需要32g吗
云数据库数据安全
软件开发企业人数规定
服务器架设传奇卡顿
数据库中的sno表示什么
软件开发用英文怎么写
国脉科技参股的互联网学校
网络安全方案与标准
吉林省软件开发定额标准
SQL数据库文件创建失败
花小雨网络技术工作室
儿童网络安全 讲话
怎么设置数据库从1开始
同花顺数据库财报数据
fb数据库安装
南通政务软件开发多少钱
数据库网络控制方式
是开展网络安全
服务器怎么进入管理
服务器管理口能上传文件吗
数据库连接可视化工具
数据库建表文件删除
当发生网络安全事件时怎么办
做软件开发和编程有啥区别吗
雷晶网络技术
龙曦科技发力互联网
软件开发可以使用破解软件吗
如何做管理app软件开发