日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Go配置管理庫Viper怎么讀取結(jié)構(gòu)體嵌套的配置信息?

01 介紹

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

Go 語言中很多老牌開源項目也都選擇使用 Viper,它功能非常強大,本文介紹 Viper 讀取結(jié)構(gòu)體嵌套配置信息的使用方式。

02 讀取結(jié)構(gòu)體嵌套配置信息

在實際項目開發(fā)中,我們經(jīng)常會遇到一些比較復(fù)雜的配置信息,比如多層嵌套的配置信息,在結(jié)構(gòu)體中嵌套結(jié)構(gòu)體和切片。

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 是一個多層嵌套的配置信息。

讀取該多層嵌套配置信息,如果我們使用 GetXXX 函數(shù)獲取值,代碼會非常繁瑣。

Viper 提供了 2 個解析函數(shù),Unmarshal 和 UnmarshalKey,我們可以使用它們非常方便地讀取多層嵌套配置信息,可以將所有或指定配置信息解析到 struct、map 等數(shù)據(jù)結(jié)構(gòu)中。

我們通過示例代碼,介紹它們的使用方式。

目錄:

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

示例代碼:

package main

import (
 "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

輸出結(jié)果:

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}]}

閱讀上面這段代碼,結(jié)構(gòu)體 UserData 中嵌套結(jié)構(gòu)體 OtherInfo 和切片 Language,我們使用 Viper 提供的 tag 標簽 mapstructure,將讀取到的配置信息解析到 struct 中。

需要注意的是,解析指定配置信息使用 UnmarshalKey 函數(shù),解析全部配置信息使用 Unmarshal,二者的 yaml 文件格式也不一樣,讀者朋友們小心踩“坑”。

03 總結(jié)

本文我們通過示例代碼,介紹怎么使用 Viper 讀取嵌套配置信息,它提供兩個函數(shù) Unmarshal 和 UnmarshalKey,分別用于解析全部配置信息,和解析指定配置信息。

需要注意的是,針對結(jié)構(gòu)體中的嵌套結(jié)構(gòu)體類型或切片類型的字段,我們需要使用 Viper 提供的 tag 標簽 mapstructure,否則將無法讀取到配置信息的內(nèi)容。

此外,yaml 格式也需要熟練掌握,盡量不要因為 yaml 格式不對,導(dǎo)致解析不出配置信息中的內(nèi)容。


當前標題:Go配置管理庫Viper怎么讀取結(jié)構(gòu)體嵌套的配置信息?
本文地址:http://www.dlmjj.cn/article/dhegech.html