当前位置: 首页 > news >正文

Go语言读取解析yml文件,快速转换yml到go struct

YAML (YAML Ain't a Markup Language)是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被计算机程序识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等。
优点:
易于人们阅读。数据在编程语言之间是可移植的。匹配敏捷语言的本机数据结构。具有一致的模型来支持通用工具。支持单程处理。具有表现力和可扩展性。易于实现和使用。
约定:
k: v 表示键值对关系,冒号后面必须有一个空格
使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的
大小写敏感
缩进时不允许使用Tab键,只允许使用空格。
松散表示,java中对于驼峰命名法,可用原名或使用-代替驼峰。

Go语言读取并解析yml文件用到了os.ReadFilegopkg.in/yaml.v2
首先定义yml的struct数据格式,然后读取文件字节,最后解析yml字节为struct数据格式。

config.yml

obj1: # 对象mapstr1: '单引号\n不转义'str2: "双引号\n转义"
obj2: {"a1": 1, "a2": 2}
dt: 2022/02/14 # 日期
ip_list1: # 多行list- 172.18.0.1- 172.18.0.2
ip_list2: [172.18.0.3, 172.18.0.4]  # 行内list

可以使用yaml2go转换yml数据结构到go类型。
另外还有很多类似工具:
YAML 转 GO: www.printlove.cn/tools/yaml2go
JSON 转 GO: www.printlove.cn/tools/json2go
SQL 转 GORM Model: www.printlove.cn/tools/sql2gorm
SQL 转 entgo schema: printlove.cn/tools/sql2ent
SQL 转 go-zero Model: printlove.cn/tools/sql2gozero

go代码

package mainimport ("fmt""os""gopkg.in/yaml.v2"
)func main() {// Obj2type Obj2 struct {A1 int `yaml:"a1"`A2 int `yaml:"a2"`}// Obj1type Obj1 struct {Str1 string `yaml:"str1"`Str2 string `yaml:"str2"`}// Configtype Config struct {Obj1    Obj1     `yaml:"obj1"`Obj2    Obj2     `yaml:"obj2"`Dt      string   `yaml:"dt"`IpList1 []string `yaml:"ip_list1"`IpList2 []string `yaml:"ip_list2"`}config := Config{}data, err := os.ReadFile("config.yml")if err != nil {panic("读取文件失败")}err = yaml.Unmarshal(data, &config)if err != nil {panic("解析文件失败")}fmt.Println(config.Obj1.Str1)
}

参考

https://pkg.go.dev/gopkg.in/yaml.v2#example-Unmarshal-Embedded

http://www.lryc.cn/news/6046.html

相关文章:

  • 第二十六章 java并发常见知识内容(ThreadLocal 详解)
  • 人类的第一语言是什么
  • jsp(全部知识点)
  • 测试开发面试基础题
  • C++——多态|虚函数|重写|虚表
  • IPV4地址详解
  • (一)初识Streamlit(附安装)
  • 【新】华为OD机试 - 斗地主 2(Python)| 刷完获取OD招聘渠道
  • 秒杀项目之消息推送
  • 【重磅】IEEE33配电网两阶段鲁棒优化调度CCG
  • GPT2代码拆解+生成实例
  • 基于android的即时通讯APP 聊天APP
  • 【C++】二叉树之力扣经典题目1——详解二叉树的递归遍历,二叉树的层次遍历
  • MySQL数据库调优————SQL性能分析
  • sql数据库高级编程总结(一)
  • 软件工程(5)--喷泉模型
  • SM2数字签名
  • RPA+保险后台部门擦出不一样“火花” | RPA案例
  • 设备树相关概念的理解
  • ubuntu20.04下配置深度学习环境GPU
  • 用egg.js来写一个api管理系统(一)
  • 企业数字化转型和升级:架构设计方法与实践
  • 【LeetCode】环形链表 II [M](链表)
  • Unity之如何实现一个VR任务(剧情)系统
  • k8s核心概念与kubectl命令行工具的使用
  • 【零基础入门前端系列】—无序列表、有序列表、定义列表(四)
  • 为什么重写equals还要重写hashcode方法
  • 电子技术——电流镜负载的差分放大器
  • go面试题
  • 攻防世界-Confusion1