目录
前言yaml.v3 包读取 yaml 文件viper 包读取 yaml 文件小结前言
在日常开发中,YAML 格式的文件基本上被默认为是配置文件,其内容因为缩进带来的层级感看起来非常直观和整洁。本文将会对 YAML内容的读取进行介绍。
yaml.v3 包
yaml.v3的包,可以让我们在 Go里面轻松地操作 yaml格式的数据(如将 yaml格式转成结构体等)。在使用 yaml.v3包之前,我们需要先安装它:
(资料图片仅供参考)
go get gopkg.in/yaml.v3
读取 yaml 文件
yaml 测试文件内容:
mysql: url: 127.0.0.1 port: 3306 redis: host: 127.0.0.1 port: 6379
将 yaml文件的数据转成自定义的结构体或 Map
import (
"fmt"
"gopkg.in/yaml.v3"
"os"
)
type Config struct {
Mysql Mysql `json:"mysql"`
Redis Redis `json:"redis"`
}
type Mysql struct {
Url string
Port int
}
type Redis struct {
Host string
Port int
}
func main() {
dataBytes, err := os.ReadFile("test.yaml")
if err != nil {
fmt.Println("读取文件失败:", err)
return
}
fmt.Println("yaml 文件的内容: \n", string(dataBytes))
config := Config{}
err = yaml.Unmarshal(dataBytes, &config)
if err != nil {
fmt.Println("解析 yaml 文件失败:", err)
return
}
fmt.Printf("config → %+v\n", config) // config → {Mysql:{Url:127.0.0.1 Port:3306} Redis:{Host:127.0.0.1 Port:6379}}
mp := make(map[string]any, 2)
err = yaml.Unmarshal(dataBytes, mp)
if err != nil {
fmt.Println("解析 yaml 文件失败:", err)
return
}
fmt.Printf("map → %+v", config) // config → {Mysql:{Url:127.0.0.1 Port:3306} Redis:{Host:127.0.0.1 Port:6379}}
}执行结果:
首先通过yaml 文件的内容:
mysql:
url: 127.0.0.1
port: 3306
redis:
host: 127.0.0.1
port: 6379
config → {Mysql:{Url:127.0.0.1 Port:3306} Redis:{Host:127.0.0.1 Port:6379}}
map → {Mysql:{Url:127.0.0.1 Port:3306} Redis:{Host:127.0.0.1 Port:6379}}
os包里的 ReadFile函数读取文件的内容,获取 []byte类型的数据;通过 yaml包的 Unmarshal(in []byte, out interface{})函数将字节数组类型的数据解析到 Config结构体变量里,Unmarshal 函数需要传递两个参数,第一个是 字节数组类型的数据,第二个是一个任意类型的数据,实际上要传入一个指针变量,或者某个变量的地址值;通过打印结果可以看到 yaml 文件的内容已经成功解析到结构体 config和 mp变量里了,后续可以通过操作结构体和 map获取对应数据。
viper 包
viper包可以帮助我们做很多东西,比如读取 json、yaml、properties等配置文件,读取环境变量、读取命令行参数等。在使用 viper包之前,我们需要先安装它:
go get github.com/spf13/viper
读取 yaml 文件
yaml 测试文件内容:
mysql: url: 127.0.0.1 port: 3306 redis: host: 127.0.0.1 port: 6379
代码示例:
import (
"fmt"
"github.com/spf13/viper"
)
func main() {
// 设置配置文件的名字
viper.SetConfigName("test")
// 设置配置文件的类型
viper.SetConfigType("yaml")
// 添加配置文件的路径,指定 config 目录下寻找
viper.AddConfigPath("./config")
// 寻找配置文件并读取
err := viper.ReadInConfig()
if err != nil {
panic(fmt.Errorf("fatal error config file: %w", err))
}
fmt.Println(viper.Get("mysql")) // map[port:3306 url:127.0.0.1]
fmt.Println(viper.Get("mysql.url")) // 127.0.0.1
}通过 SetConfigName函数,指定配置文件的名称;
通过 SetConfigType函数,指定配置文件的类型;
通过 AddConfigPath函数,指定配置文件所在目录,可以多次调用此函数,指定多个目录;
通过 ReadInConfig函数,寻找配置文件并读取,操作的过程中可能会发生错误,如配置文件没找到,配置文件的内容格式不正确等;
读取文件成功之后,可以通过 Get函数,通过指定 key获取对应的 value。
小结
本文介绍了读取 YAML 配置文件的两种方式,第一种是通过 yaml.v3包,第二种是通过 viper包。如果是在项目里解析配置文件,推荐使用 viper包,它支持解析多种格式的配置文件,监听配置文件的更新,修改配置文件等。
到此这篇关于Go语言读取YAML 配置文件的两种方式分享的文章就介绍到这了,更多相关Go读取YAML 配置文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?

