1 概述
YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写。YAML 以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。一个典型的 YAML 如下:
title: 小韩说课
category: go
tag:
- OOP
- GoLang
基本语法为:
- 使用缩进表示层级关系
- 禁止使用tab缩进,只能使用空格键
- 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级
在项目中,配置文件选择 YAML 是常见的选择。
参考文档:
- The Official YAML Web Site
- 语法参考
本文介绍在 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)
}
// text
field1: 小韩说课
field2:
field3: value
field4:
- 42
- 1024
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。
- 赞助本站
- 微信扫一扫
- 加入Q群
- QQ扫一扫
评论