📚 开源资源分享——颜佐光的个人书架
✉️ 联系站长
书架 / go / 语法

Go语言解析YAML

2020-06-28 17:36 · 约 1,409 字 · 浏览 2,602 次语法

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
← 返回《go》目录书架 →