千家信息网

Viper解析以及如何进行加载配置

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这期内容当中小编将会给大家带来有关Viper解析以及如何进行加载配置,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Viper解析&加载配置1 Viper是什么Vip
千家信息网最后更新 2026年11月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安全错误 数据库的锁怎样保障安全 互联网科技工作委员会主任 互联网科技行业发展 科技创新与互联网经济 疫情对互联网科技公司影响 互联网科技金融 互联网科技英文 互联网科技小贷 互联网科技小额贷款 融贸通互联网科技 互联网科技汛 恒生科技互联网指数分析 广州优美互联网科技 金融科技与互联网金融相同和不同 国大互联网教育科技有限公司薪资 南通创西澳互联网科技有限公司 互联网企业科技类企业如何做账 中国科技和美国互联网 科技互联网专业务虚会材料 互联网科技创业计划的风险分析 武汉亿视互联网科技有限公司 山东特亿宝互联网科技有限公司 科技制造互联网公司 镁科技互联网资讯平台 成都仁贤领冠互联网科技有限公司 移动互联网科技股 互联网媒体平台算高科技产业 本届互联网大会上的黑科技 科技互联网行业投资研究 北京天晋互联网科技有限公司 科技发展第三阶段互联网时代
0