Go讀取yaml檔案到struct類

壯壯熊發表於2023-01-16

1、yaml檔案準備

common:
   secretid: AKIDxxxxx
   secretKey: 3xgGxxxx
   egion: ap-guangzhou
   zone: ap-guangzhou-7
   InstanceChargeType: POSTPAID_BY_HOUR

2、config配置類準備

可以透過線上配置工具轉換成struct

例如:https://www.printlove.cn/tools/yaml2go

程式碼:

type ConfigData struct {
   // 公共配置
   Common Common `yaml:"common"`
}

type Common struct {
   // 金鑰id。金鑰可前往官網控制檯 https://console.cloud.tencent.com/cam/capi 進行獲取
   SecretId string `yaml:"secretid"`
   // 金鑰key
   SecretKey string `yaml:"secretKey"`
   // 地域
   Region string `yaml:"region"`
   // 可用區
   Zone string `yaml:"zone"`
   //例項計費模式。取值範圍:PREPAID:預付費,即包年包月。POSTPAID_BY_HOUR:按小時後付費。
   InstanceChargeType string `yaml:"InstanceChargeType"`
}

3、讀取配置檔案到配置類

使用viper讀取配置到配置類中

3.1、安裝Viper元件

go install github.com/spf13/viper@latest

3.2、golang** **程式碼編寫

yaml檔案放在工程根目錄的data資料夾中

package main

import (
   "bufio"
   "github.com/spf13/viper"
   "io"
   "os"
   "strings"
)

type ConfigData struct {
   // 公共配置
   Common Common `yaml:"common"`
}

type Common struct {
   // 金鑰id。
   SecretId string `yaml:"secretid"`
   // 金鑰key
   SecretKey string `yaml:"secretKey"`
   // 地域
   Region string `yaml:"region"`
   // 可用區
   Zone string `yaml:"zone"`
   //例項計費模式。取值範圍:PREPAID:預付費,即包年包月。POSTPAID_BY_HOUR:按小時後付費。
   InstanceChargeType string `yaml:"InstanceChargeType"`
}

func InitConfigStruct(path string) *ConfigData {
   var ConfigData = &ConfigData{}
   vip := viper.New()
   vip.AddConfigPath(path)
   vip.SetConfigName("config")
   vip.SetConfigType("yaml")
   //嘗試進行配置讀取
   if err := vip.ReadInConfig(); err != nil {
      panic(err)
   }
   err := vip.Unmarshal(ConfigData)
   if err != nil {
      panic(err)
   }

   return ConfigData
}

func main(){
    configData := InitConfigStruct("./data/")
    secretId := configData.Common.SecretId
    secretKey := configData.Common.SecretKey
    fmt.Printf("secretId:%s\n", secretId)
    fmt.Printf("secretKey:%s\n", secretKey)

}

相關文章