Go语言解析YAML
1 概述
YAML是"YAML Ain’t a Markup Language"(YAML不是一种置标语言)的递归缩写。YAML 以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。一个典型的 YAML 如下:
title: 小韩说课
category: go
tag:
- OOP
- GoLang
基本语法为:
- 使用缩进表示层级关系
- 禁止使用tab缩进,只能使用空格键
- 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级
- 在项目中,配置文件选择 YAML 是常见的选择。
参考文档:
- The Official YAML Web Sitehttp://www.yaml.org/
- 语法参考http://docs.hellokang.net/yaml/
本文介绍在 Go 语言中解析 YAML。
2. 安装 go-yaml/yaml
Go 语言中解析 YAML 最出名的应该是 go-yaml/yaml。github地址为:< https://github.com/go-yaml/yaml>
下面的命令将其安装在 GOPATH 目录中:
go get gopkg.in/yaml.v2
3 解析 YAML
yaml.Unmarshal 函数负责将 YAML 格式文本解析,演示如下:
import (
"gopkg.in/yaml.v2"
)
// 待解析数据
yamlContent := `
field1: 小韩说课
field2:
field3: value
field4: [42, 1024]
`
// 存储解析数据
result := make(map[string]interface{})
// 执行解析
err = yaml.Unmarshal([]byte(data), &result)
if err != nil {
log.Fatalf("error: %v", err)
}
// result
// map[field1:小韩说课 field2:map[field3:value field4:[42 1024]]]
4. 构建 YAML
yaml.Marshal 函数可以利用 map 数据构建 YAML 文本,演示如下:
import (
"gopkg.in/yaml.v2"
)
// map数据
data := map[string]interface{}{
"field1": "小韩说课",
"field2": map[string]interface{}{
"field3": "value",
"field4": []int{42, 1024}
}
}
text, err = yaml.Marshal(&data)
if err != nil {
log.Fatalf("error: %v", err)
}
结果:
field1: 小韩说课
field2:
field3: value
field4:
- 42
- 1024
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2020/06/28 09:36