使用 gopkg.in/yaml.v3 解析 YAML 数据
YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,常用于配置文件和数据交换。在 Go 语言中,你可以使用 gopkg.in/yaml.v3 包来解析和生成 YAML 数据。本文将介绍如何使用 gopkg.in/yaml.v3 来处理 YAML 数据。
安装 gopkg.in/yaml.v3
首先,你需要安装 gopkg.in/yaml.v3 包。使用以下命令来获取:
go get gopkg.in/yaml.v3
解析 YAML 数据
下面是一个简单的示例,演示了如何使用 gopkg.in/yaml.v3 解析 YAML 数据。
创建 YAML 数据
首先,创建一个包含 YAML 数据的文件,例如 config.yaml:
server:
port: 8080
host: localhost
database:
host: db.example.com
port: 5432
username: user
password: secret
使用 gopkg.in/yaml.v3 解析 YAML
接下来,在你的 Go 代码中使用 gopkg.in/yaml.v3 包来解析 YAML 数据:
package main
import (
"fmt"
"gopkg.in/yaml.v3"
"os"
)
type Config struct {
Server ServerConfig `yaml:"server"`
Database DatabaseConfig `yaml:"database"`
}
type ServerConfig struct {
Port int `yaml:"port"`
Host string `yaml:"host"`
}
type DatabaseConfig struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
Username string `yaml:"username"`
Password string `yaml:"password"`
}
func main() {
// 打开 YAML 文件
file, err := os.Open("config.yaml")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// 创建解析器
decoder := yaml.NewDecoder(file)
// 配置对象
var config Config
// 解析 YAML 数据
err = decoder.Decode(&config)
if err != nil {
fmt.Println("Error decoding YAML:", err)
return
}
// 输出配置项
fmt.Printf("Server Port: %d\n", config.Server.Port)
fmt.Printf("Server Host: %s\n", config.Server.Host)
fmt.Printf("Database Host: %s\n", config.Database.Host)
fmt.Printf("Database Port: %d\n", config.Database.Port)
fmt.Printf("Database Username: %s\n", config.Database.Username)
fmt.Printf("Database Password: %s\n", config.Database.Password)
}
在上述代码中,我们首先打开 YAML 文件,然后创建一个 yaml.Decoder 对象来解码 YAML 数据。然后,我们定义了一个配置结构体,该结构体对应于 YAML 数据的结构。最后,我们使用 decoder.Decode() 函数来解析 YAML 数据,并输出配置项的值。
运行程序
运行上述程序,你将看到它输出配置文件中的值:
Server Port: 8080
Server Host: localhost
Database Host: db.example.com
Database Port: 5432
Database Username: user
Database Password: secret
生成 YAML 数据
除了解析 YAML 数据,gopkg.in/yaml.v3 也支持生成 YAML 数据。下面是一个示例,演示如何创建并保存 YAML 数据。
package main
import (
"fmt"
"gopkg.in/yaml.v3"
"os"
)
type Config struct {
Server ServerConfig `yaml:"server"`
Database DatabaseConfig `yaml:"database"`
}
type ServerConfig struct {
Port int `yaml:"port"`
Host string `yaml:"host"`
}
type DatabaseConfig struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
Username string `yaml:"username"`
Password string `yaml:"password"`
}
func main() {
config := Config{
Server: ServerConfig{
Port: 8080,
Host: "localhost",
},
Database: DatabaseConfig{
Host: "db.example.com",
Port: 5432,
Username: "user",
Password: "secret",
},
}
// 创建文件
file, err := os.Create("output.yaml")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
// 创建编码器
encoder := yaml.NewEncoder(file)
// 将配置编码为 YAML 数据
err = encoder.Encode(&config)
if err != nil {
fmt.Println("Error encoding YAML:", err)
return
}
fmt.Println("YAML data saved to output.yaml")
}
在上述代码中,我们首先创建一个配置对象,然后创建文件 output.yaml。接下来,我们使用 yaml.NewEncoder() 函数创建一个编码器,并使用 encoder.Encode() 函数将配置对象编码为 YAML 数据。最后,我们将生成的 YAML 数据保存到文件中。
最后
gopkg.in/yaml.v3 是一个功能强大的 Go 库,用于解析和生成 YAML 数据。它支持复杂的 YAML 结构,可以轻松地读取和写入配置文件。通过使用这个库,你可以方便地在你的 Go 项目中处理 YAML 格式的数据,无论是从文件中读取配置还是将配置写入文件,都变得非常简单。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
使用 gopkg.in/yaml.v3 解析 YAML 数据的更多相关文章
- Golang 解析Yaml格式
Golang官方并没有提供Yaml解析包,所以需要使用第三方包.可用的第三方包有不少,这里选择的是 gopkg.in/yaml.v2,这个包在github上有不少的star,也的确挺好用.其使用的是A ...
- python基础——python解析yaml类型文件
一.yaml介绍 yaml全称Yet Another Markup Language(另一种标记语言).采用yaml作为配置文件,文件看起来直观.简洁.方便理解.yaml文件可以解析字典.列表和一些基 ...
- Java使用snakeyaml解析yaml
YAML Yaml是一种"是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言."类似于XML但比XML更简洁,语法详见 http://www.ruan ...
- YAML文件解析
YAML是“另一种标记语言”的外语缩写,YAML 是一种比JSON(json多层次{ 与 [ 会被搞晕的)更直观的表现形式,展示上更易查错和关系描述.因为不需要一个专业工具就可以排查正确性.YAML目 ...
- Java解析YAML和Android解析YAML
一.Java解析YAML 1. API的选择 一般分两种:Jyaml和snakeYAML.(Jyaml下载地址:http://download.csdn.net/detail/dgssfgfs/847 ...
- yaml文件解析详解
前言 yaml文件是什么?yaml文件其实也是一种配置文件类型,相比较ini,conf配置文件来说,更加的简洁,操作也更加简单,同时可以存放不同类型的数据,不会改变原有数据类型,所有的数据类型在读取时 ...
- 使用ruamel.yaml库,解析yaml文件
在实现的需求如下: 同事提供了一个文本文件,内含200多个host与ip的对应关系,希望能在k8s生成pod时,将这些对应关系注入到/etc/hosts中. 网上看文档,这可以通过扩充pod中的hos ...
- c++ 解析yaml文件
一直用c++操作ini做配置文件,想换成yaml,在全球最大的同性交友网站github上搜索,看有没有开源的库,功夫不负有心人,找到了yaml-cpp,用他解析了一个yaml的例子非常好使,分享一下如 ...
- yaml 文件解析
前言 yaml文件其实也是一种配置文件类型,相比较ini,conf配置文件来说,更加的简洁,操作也更加简单,同时可以存放不同类型的数据,不会改变原有数据类型,所有的数据类型在读取时都会原样输出,yam ...
- Python解析yaml配置文件
1.代码测试 import yaml fd = open('fileName.yaml', 'r') dict_tmp = yaml.load(fd) fd.close() print dict_tm ...
随机推荐
- JS工具函数
工具函数 用于工程化开发,记录,备用 返回 [min, max) 间的随机整数 /** 返回 [min, max) 间的随机整数 */ export function getRandom(min, m ...
- 2023-06-10:给定一个由 n 个节点组成的网络,用 n x n 个邻接矩阵 graph 表示 在节点网络中,只有当 graph[i][j] = 1 时,节点 i 能够直接连接到另一个节点 j。
2023-06-10:给定一个由 n 个节点组成的网络,用 n x n 个邻接矩阵 graph 表示 在节点网络中,只有当 graph[i][j] = 1 时,节点 i 能够直接连接到另一个节点 j. ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-3-离线搭建playwright环境
1.简介 有些小伙伴或者童鞋们私信留言说自己是在公司局域网办公,或者公司为了安全对网络管控比较严格(尤其是一些大的国企.央企),总之就是一句话无法连到外网去在线下载,宏哥刚看到留言时觉得这问题还留言问 ...
- 记一次加锁导致ECS服务器CPU飙高的处理
导航 火线告警,CPU飚了 版本回退,迅速救火 猜测:分布式锁是罪魁祸首 代码重构,星夜上线 防患未然,功能可开关 高度戒备,应对早高峰 实时调整方案,稳了 结语 参考 本文首发于智客工坊-<记 ...
- CKS 考试题整理 (12)-Trivy扫描镜像安全漏洞
Task 使用Trivy开源容器扫描器检测namespace kamino中 Pod 使用的具有严重漏洞的镜像. 查找具有High或Critical严重性漏洞的镜像,并删除使用这些镜像的Pod. 注意 ...
- Journal of Electronic Imaging投稿分享
Journal of Electronic Imaging投稿分享 在研究生阶段中的第一篇论文,前后总共三个月,还是很开心的!!! 附下中稿图片 这个期刊从二月份开始投的,然后三月份给了大修,大修时间 ...
- 尚医通-day14【创建订单】(内附源码)
页面预览 订单详情 订单列表 第01章-创建订单 生成订单分析 生成订单方法参数:就诊人id与 排班id 生成订单需要获取就诊人信息(微服务远程调用service-user) 获取排班信息与规则信息( ...
- 手写RPC框架之泛化调用
一.背景 前段时间了解了泛化调用这个玩意儿,又想到自己之前写过一个RPC框架(参考<手写一个RPC框架>),于是便想小试牛刀. 二.泛化调用简介 什么是泛化调用 泛化调用就是在不依赖服务方 ...
- 【ElasticSearch】大数据量情况下的前缀、中缀实时搜索方案
简述 业务开发中经常会遇到这样一种情况,用户在搜索框输入时要实时展示搜索相关的结果.要实现这个场景常用的方案有Completion Suggester.search_as_you_type.那么这两种 ...
- java volatile是如何保证可见性的?
lock前缀指令干的事. volatile 修饰的变量在进行写操作时会多出一条如下的汇编指令: lock addl $0x0,(%esp) volatile就是靠这个lock前缀指令去实现可见性的,当 ...