广东网站建设哪家专业,佛山营销网站建设服务公司,物理网络设计,苏州网络公司哪家最好YAML (YAML Aint a Markup Language)是一种标记语言#xff0c;通常以.yml为后缀的文件#xff0c;是一种直观的能够被计算机程序识别的数据序列化格式#xff0c;并且容易被人类阅读#xff0c;容易和脚本语言交互的#xff0c;可以被支持YAML库的不同的编程语言程序导入…YAML (YAML Aint a Markup Language)是一种标记语言通常以.yml为后缀的文件是一种直观的能够被计算机程序识别的数据序列化格式并且容易被人类阅读容易和脚本语言交互的可以被支持YAML库的不同的编程语言程序导入一种专门用来写配置文件的语言。可用于如 JavaC/C, Ruby, Python, Perl, C#, PHP等。 优点 易于人们阅读。数据在编程语言之间是可移植的。匹配敏捷语言的本机数据结构。具有一致的模型来支持通用工具。支持单程处理。具有表现力和可扩展性。易于实现和使用。 约定 k: v 表示键值对关系冒号后面必须有一个空格 使用空格的缩进表示层级关系空格数目不重要只要是左对齐的一列数据都是同一个层级的 大小写敏感 缩进时不允许使用Tab键只允许使用空格。 松散表示java中对于驼峰命名法可用原名或使用-代替驼峰。
Go语言读取并解析yml文件用到了os.ReadFile和gopkg.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 (fmtosgopkg.in/yaml.v2
)func main() {// Obj2type Obj2 struct {A1 int yaml:a1A2 int yaml:a2}// Obj1type Obj1 struct {Str1 string yaml:str1Str2 string yaml:str2}// Configtype Config struct {Obj1 Obj1 yaml:obj1Obj2 Obj2 yaml:obj2Dt string yaml:dtIpList1 []string yaml:ip_list1IpList2 []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