Go读取yaml文件到struct类
Go读取yaml文件到struct类
1、yaml文件准备
common:
secretid: AKIDxxxxx
secretKey: 3xgGxxxx
region: 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)
}
或者
package initialize
import (
"fmt"
"os"
"gitlab.itvgame.org/storage-worker/global"
"gitlab.itvgame.org/storage-worker/utils"
"gopkg.in/yaml.v2"
)
// Config .
func Config() {
// 1. read yaml, instance config.Zap
yfile, err := os.Open(utils.ConfigFile)
if err != nil {
global.Zap.Error(fmt.Sprintf("%v", err))
os.Exit(1)
}
defer yfile.Close()
ydecode := yaml.NewDecoder(yfile)
ydecode.Decode(&global.Config)
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2018-02-06 linux反向删除文件