成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 配置管理庫 Viper 怎么讀取結構體嵌套的配置信息?

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

01 介紹

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

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

02 讀取結構體嵌套配置信息

在實際項目開發中,我們經常會遇到一些比較復雜的配置信息,比如多層嵌套的配置信息,在結構體中嵌套結構體和切片。

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 函數獲取值,代碼會非常繁瑣。

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

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

目錄:

├── 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

輸出結果:

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語言開發棧
相關推薦

2018-10-09 11:27:24

阿里云ACM

2019-09-24 16:15:03

架構配置代碼

2023-05-30 07:50:56

項目管理權限

2023-04-10 08:11:27

Jenkins數據庫

2024-04-09 07:27:06

微服務架構YAML

2009-03-25 09:52:00

虛擬網絡VLAN配置

2022-07-07 10:43:58

安全配置管理SCM

2025-01-13 00:00:07

Go語言微服務

2010-08-06 14:53:35

思科路由器配置信息

2011-02-25 14:00:15

ProFTPD

2010-02-04 16:57:40

Android配置信息

2017-10-31 14:58:11

Spring Clou配置信息問題

2010-01-08 10:18:47

Ubuntu MySQ

2022-05-06 12:04:24

Ansible管理工具

2009-06-17 14:41:57

Hibernate查詢

2021-09-08 15:09:29

鴻蒙HarmonyOS應用

2012-02-06 09:21:26

JavaCommons Con

2020-12-02 09:10:22

Go結構數據類型

2009-12-21 13:27:45

WCF服務配置信息

2021-04-20 09:00:48

Go 語言結構體type
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲综合在线视频 | 欧美三级成人理伦 | 久久久久久亚洲精品不卡 | 亚洲精品乱码久久久久久蜜桃91 | 成人免费在线 | 亚洲av毛片 | 国产精品久久久久久影视 | 欧美国产视频 | 欧美日韩一区二区视频在线观看 | 嫩草视频免费 | 欧美日韩精品久久久免费观看 | 欧美精品在线播放 | 午夜av成人| 蜜臀久久 | av中文字幕在线 | 999视频在线播放 | 久久国产精品一区二区三区 | 中文字幕第二区 | 亚洲成人自拍 | 五月天激情电影 | 国产精品v | 午夜免费视频 | 欧美成人免费电影 | 久久免费精品 | 久久久91精品国产一区二区精品 | 日韩视频一区二区 | 一区二区精品在线 | 综合久久久久 | 免费视频一区 | 免费午夜视频 | 在线一区视频 | 四虎成人免费电影 | 一区二区三区精品视频 | 成人精品一区二区三区中文字幕 | av小说在线 | av在线播放国产 | 一区欧美 | 精品国产一区二区三区性色av | 日韩在线观看一区二区三区 | 一级大片网站 | 黑人巨大精品欧美黑白配亚洲 |