当前位置:首页 >综合 >Go 配置管理库 Viper 怎么读取结构体嵌套的配置信息? 体嵌套和解析指定配置信息

Go 配置管理库 Viper 怎么读取结构体嵌套的配置信息? 体嵌套和解析指定配置信息

2024-06-30 22:47:29 [百科] 来源:避面尹邢网

Go 配置管理库 Viper 怎么读取结构体嵌套的配置配置配置信息?

作者:frank 开发 前端 本文我们通过示例代码,介绍怎么使用 Viper 读取嵌套配置信息,管理它提供两个函数 Unmarshal​ 和 UnmarshalKey,结构分别用于解析全部配置信息,体嵌套和解析指定配置信息。信息

01 介绍

Golang 配置信息管理库 Viper[1],配置配置它提供一套完整的管理管理配置信息的解决方案。

Go 语言中很多知名开源项目也都选择使用 Viper,结构它功能非常强大,体嵌套本文介绍 Viper 读取结构体嵌套配置信息的信息使用方式。

Go 配置管理库 Viper 怎么读取结构体嵌套的配置信息? 体嵌套和解析指定配置信息

02 读取结构体嵌套配置信息

在实际项目开发中,配置配置我们经常会遇到一些比较复杂的管理配置信息,比如多层嵌套的结构配置信息,在结构体中嵌套结构体和切片。体嵌套

Go 配置管理库 Viper 怎么读取结构体嵌套的配置信息? 体嵌套和解析指定配置信息

user_data:  uid: 10000  uname: "frank"  other_info:    email: "gopher@email.cn"    address: "Beijing China"  language:    - name: "go"      score: 90    - name: "php"      score: 95    - name: "JavaScript"      score: 80

阅读上面 yaml 文件,信息user_data 是一个多层嵌套的配置信息。

Go 配置管理库 Viper 怎么读取结构体嵌套的配置信息? 体嵌套和解析指定配置信息

读取该多层嵌套配置信息,如果我们使用 GetXXX 函数获取值,代码会非常繁琐。

Viper 提供了 2 个解析函数,Unmarshal 和 UnmarshalKey,我们可以使用它们非常方便地读取多层嵌套配置信息,可以将所有或指定配置信息解析到 struct、map 等数据结构中。

我们通过示例代码,介绍它们的使用方式。

目录:

├── configs│   ├── default.yaml│   └── test.yaml├── go.mod├── go.sum└── main.go

示例代码:

package mainimport ( "fmt" "github.com/spf13/viper")func main() {  v := viper.New() //v.SetConfigFile("./configs/test.yaml") v.SetConfigFile("./configs/default.yaml") err := v.ReadInConfig() if err != nil {   fmt.Println(err)  return } //err = v.Unmarshal(&userData) err = v.UnmarshalKey("user_data", &userData) if err != nil {   fmt.Println(err)  return } fmt.Printf("userData=%+v\n", userData)}type UserData struct {  Uid       int        `json:"uid"` Uname     string     `json:"uname"` OtherInfo OtherInfo  `json:"other_info" mapstructure:"other_info"` Language  []Language `json:"language" mapstructure:"language"`}type OtherInfo struct {  Email   string Address string}type Language struct {  Name  string Score int}var userData UserData

输出结果:

userData={ Uid:10000 Uname:frank OtherInfo:{ Email:gopher@email.cn Address:Beijing China} Language:[{ Name:go Score:90} { Name:php Score:95} { Name:JavaScript Score:80}]}

阅读上面这段代码,结构体 UserData 中嵌套结构体 OtherInfo 和切片 Language,我们使用 Viper 提供的 tag 标签 mapstructure,将读取到的配置信息解析到 struct 中。

需要注意的是,解析指定配置信息使用 UnmarshalKey 函数,解析全部配置信息使用 Unmarshal,二者的 yaml 文件格式也不一样,读者朋友们小心踩“坑”。

03 总结

本文我们通过示例代码,介绍怎么使用 Viper 读取嵌套配置信息,它提供两个函数 Unmarshal 和 UnmarshalKey,分别用于解析全部配置信息,和解析指定配置信息。

需要注意的是,针对结构体中的嵌套结构体类型或切片类型的字段,我们需要使用 Viper 提供的 tag 标签 mapstructure,否则将无法读取到配置信息的内容。

此外,yaml 格式也需要熟练掌握,尽量不要因为 yaml 格式不对,导致解析不出配置信息中的内容。

责任编辑:武晓燕 来源: Golang语言开发栈 Go配置管理库

(责任编辑:知识)

    推荐文章
    热点阅读