0
点赞
收藏
分享

微信扫一扫

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: # 对象map
  str1: '单引号\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 main

import (
	"fmt"
	"os"

	"gopkg.in/yaml.v2"
)

func main() {
	// Obj2
	type Obj2 struct {
		A1 int `yaml:"a1"`
		A2 int `yaml:"a2"`
	}

	// Obj1
	type Obj1 struct {
		Str1 string `yaml:"str1"`
		Str2 string `yaml:"str2"`
	}

	// Config
	type 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


举报

相关推荐

0 条评论