当前位置: 首页 > 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

相关文章:

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

YAML (YAML Aint a Markup Language)是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被计算机程序识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入…...

第二十六章 java并发常见知识内容(ThreadLocal 详解)

JAVA重要知识点带着疑问看ThreadLocalGC 之后 key 是否为 null?ThreadLocalMap Hash 算法ThreadLocalMap Hash 冲突ThreadLocalMap.set()方法ThreadLocalMap过期 key 的探测式清理流程ThreadLocalMap扩容机制ThreadLocalMap.get()详解ThreadLocalMap过期 key 的启发…...

人类的第一语言是什么

其实机器智能始终存在一个争议 没有人类的肢体和感受器无法理解和感同身受 这不用想是自然,但是可以通过虚拟数据进行模拟,深度学习便是 深度学习是模拟简单输入输出的最好选择,但不是开放性的学习 没有智能交互的智能永远不是智能 就像狼孩一…...

jsp(全部知识点)

👌 棒棒有言:也许我一直照着别人的方向飞,可是这次,我想要用我的方式飞翔一次!人生,既要淡,又要有味。凡事不必太在意,一切随缘,缘深多聚聚,缘浅随它去。凡事…...

测试开发面试基础题

1.对测试开发的理解 测试开发首先离不开测试,而软件测试是指,在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 而且,现在不仅仅是通过手工测试来发…...

C++——多态|虚函数|重写|虚表

文章目录1. 多态的概念1.1 概念2. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写虚函数重写的三个例外:2.4 普通调用和多态调用:2.5 C11 override 和 final2.6 重载、虚函数的覆盖(重写)、隐藏(重定义)的对比3. 抽象类(有关纯虚函数)3.1 …...

IPV4地址详解

文章目录IPV4地址分类编址划分子网无分类编制CIDR路由聚合应用规划(子网划分的细节)定长的子网掩码FLSM变长的子网掩码VLSMIPV4地址 IPV4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口…...

(一)初识Streamlit(附安装)

本入门指南介绍Streamlit的工作原理、如何在您首选的操作系统上安装Streamlit,以及如何创建第一个Streamlit应用程序! 1 安装 1.1 先决条件 Python 3.7 – Python 3.11 **注:我这里使用的是anaconda的虚拟环境,用pycharm编写代…...

【新】华为OD机试 - 斗地主 2(Python)| 刷完获取OD招聘渠道

斗地主 2 题目描述 在斗地主扑克牌游戏中,扑克牌由小到大的顺序为3 4 5 6 7 8 9 10 J Q K A 2 玩家可以出的扑克牌阵型有,单张,对子,顺子,飞机,炸弹等 其中顺子的出牌规则为,由至少 5 张由小到大连续递增的扑克牌组成 且不能包含2 例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,1…...

秒杀项目之消息推送

目录一、创建消费者二、创建订单链路配置2.1 定义RabbitMQ配置类2.2 创建RabbitmqOrderConfig配置类三、如何实现RabbitMQ重复投递机制3.1 开启发送者消息确认模式3.2 消费发送确认3.2.1 创建ConfirmCallBack确认模式3.2.2 创建ReturnCallBack退回模式3.3 创建生产者3.4 创建消…...

【重磅】IEEE33配电网两阶段鲁棒优化调度CCG

目录 1 前言 2基本内容 2.1 配网两阶段鲁棒模型 2.2 求解步骤 3部分程序 4程序结果 5程序链接 1 前言 鲁棒优化是电力系统研究的热点,而两阶段鲁棒和分布鲁棒研究就成为各类期刊(sci/ei/核心)的宠儿,最简单的思路是通过改…...

GPT2代码拆解+生成实例

本文代码来自博客,GPT2模型解析参考 import torch import copy import torch.nn as nn import torch.nn.functional as F from torch.nn.modules import ModuleList from torch.nn.modules.normalization import LayerNorm import numpy as np import os from tqd…...

基于android的即时通讯APP 聊天APP

基于android的即时通讯APP 或者 聊天APP 一 项目概述 该项目是基于Android 的聊天APP系统,该APP包含前台,后台管理系统,前台包含用户通讯录,用户详情,用户聊天服务,用户二维码,发现功能,发现详情 , 个人中心, 个人信…...

【C++】二叉树之力扣经典题目1——详解二叉树的递归遍历,二叉树的层次遍历

如有错误,欢迎指正。 如有不理解的地方,可以私信问我。 文章目录题目1:根据二叉树创建字符串题目实例思路与解析代码实现题目2:二叉树的层序遍历题目思路与解析代码实现题目1:根据二叉树创建字符串 点击进入题目链接—…...

MySQL数据库调优————SQL性能分析

TIPS 本文基于MySQL 8.0 本文探讨如何深入SQL内部,去分析其性能,包括了三种方式: SHOW PROFILEINFORMATION_SCHEMA.PROFILINGPERFORMANCE_SCHEMA SHOW PROFILE SHOW PROFILE是MySQL的一个性能分析命令,可以跟踪SQL各种资源消耗。…...

sql数据库高级编程总结(一)

1、数学函数:操作一个数据,返回一个结果 (1)取上限 ceiling 如果有一个小数就取大于它的一个最小整数 列如9.5 就会取到 10 select code,name,ceiling(price) from car (2)取下限 floor 如果有一个小数就…...

软件工程(5)--喷泉模型

前言 这是基于我所学习的软件工程课程总结的第五篇文章。 迭代是软件开发过程中普遍存在的一种内在属性。经验表明,软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代,在面向对象范型中比在结构化范型中更常见。 一般说来,使用…...

SM2数字签名

文章目录6. 签名流程7. 验签流程实现参考资料6. 签名流程 M’ ZA || Msge Hash(M’)&#xff0c;并转为大数&#xff1b;生成随机数k&#xff0c;范围0<k<n&#xff1b;计算kG (x1, y1)r (e x1) mod n, 若r0或(rkn)则重新生成k&#xff1b;s (k-rd) / (1d) mod n&…...

RPA+保险后台部门擦出不一样“火花” | RPA案例

在保险行业中&#xff0c;后台业务线主要是为前台和中台等提供支持&#xff0c;提供公司整体运营服务&#xff0c;包括财务、信息、人力、综合办等。相对于中前台部门&#xff0c;后台部门离核心价值链更远一些&#xff0c;更偏支持部门&#xff0c;其中某些岗位与业务相关度强…...

设备树相关概念的理解

设备树 定义 设备树是描述硬件信息的一种树形结构&#xff0c;设备树文件会在内核启动后被内核解析得到对应设备的具体信息。 树形结构就自然会存在节点&#xff0c;硬件设备信息就存储再设备树中的节点上&#xff0c;即设备节点。而一个设备节点中可以存储硬件的多个不同属性…...

为什么操作 UI 必须加 `lcd_mutex` 互斥锁?不用会怎样?

1. 先给结论&#xff08;你必须记住&#xff09; LVGL 所有界面操作&#xff08;创建文字、按钮、刷新屏幕&#xff09;都不是线程安全的。 意思是&#xff1a; 绝对不能有两个线程同时操作 LVGL 界面&#xff01; 线程A&#xff1a;LVGL 主线程&#xff08;一直在刷新屏幕&…...

思源宋体终极指南:免费商用中文字体解决方案从入门到精通

思源宋体终极指南&#xff1a;免费商用中文字体解决方案从入门到精通 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找高质量中文字体而烦恼&#xff1f;思源宋体这款…...

Android开发避坑指南:registerForActivityResult找不到?可能是依赖版本惹的祸

Android开发实战&#xff1a;全面解析registerForActivityResult的正确使用与版本适配 在Android应用开发中&#xff0c;Activity之间的数据传递一直是核心功能之一。随着Jetpack组件的不断演进&#xff0c;Google推出了registerForActivityResult这一现代化API来替代传统的sta…...

基于Python+Hadoop+Spark的美食推荐系统 数据采集与可视化平台 Django框架

1、项目介绍 技术栈 Python语言、Django框架、Scrapy爬虫框架、Echarts 可视化&#xff0c;采集下厨房网站数据。功能模块推荐美食美食用料排行榜分析美食分类占比分析饮食科普美食分类美食详情信息美食详情做法后台数据管理项目介绍本项目基于指定技术栈&#xff0c;爬取下厨房…...

2026最新Java金三银四面试参考指南公开!

想必有很多小伙伴这会已经在为金三银四面试跳槽做准备了。临近面试肯定是要想办法提升自己的面试能力&#xff0c;这个时候如果还去一昧地提升自己的代码能力对面试是毫无帮助的。大多数人在面试的时候都会遇到以下几种情况&#xff08;大家可以看看自己中了几个&#xff09;&a…...

2026论文写作工具红黑榜:AI论文工具怎么选?用过才敢说!

2026年论文写作工具红黑榜出炉&#xff0c;千笔AI、ThouPen、豆包位列红榜&#xff0c;适配国内学术规范&#xff0c;提升写作效率&#xff1b;黑榜需避开低质免费工具、无真实引用平台及过度依赖全文生成的工具。选择时可按需求匹配度 - 数据可信度 - 成本承受力三维模型进行评…...

Onekey:Steam游戏清单管理的自动化解决方案 | 玩家与开发者必备工具

Onekey&#xff1a;Steam游戏清单管理的自动化解决方案 | 玩家与开发者必备工具 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 当独立游戏开发者小林第三次因为手动复制Steam App ID出错而导致…...

建行江门市分行:银发关爱在行动 暖心服务送到家

服务无边界。近日&#xff0c;建行广东江门分行辖内多家网点接连上演暖心一幕&#xff0c;员工们主动跨出柜台&#xff0c;将金融服务送到客户家中、病房前&#xff0c;用一次次“特事特办”的上门服务&#xff0c;化解客户的“燃眉之急”&#xff0c;生动诠释了“以客户为中心…...

Windows文件完整性验证神器:HashCheck Shell扩展完全指南

Windows文件完整性验证神器&#xff1a;HashCheck Shell扩展完全指南 【免费下载链接】HashCheck HashCheck Shell Extension for Windows with added SHA2, SHA3, and multithreading; originally from code.kliu.org 项目地址: https://gitcode.com/gh_mirrors/ha/HashChec…...

OpenClaw v2026.3.24-beta.1 深度技术分析报告:体验、生态与协作的“精装修”

报告版本&#xff1a; 1.1分析基准&#xff1a; v2026.3.23 (稳定化修复版本) -> v2026.3.24-beta.1 (预发布版)核心论点&#xff1a; 在经历了v2026.3.22的“架构大换血”与v2026.3.23的“系统性修复”之后&#xff0c;v2026.3.24-beta.1标志着OpenClaw的迭代节奏进入了一个…...