暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Go语言解析YAML

红牛编程 2018-11-17
670

上一篇解析markdown,本篇解析yaml,是为了使用Go搭建一个基于markdown的博客系统,当做一个项目。

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{421024}
    }
  }
text, err = yaml.Marshal(&data)
if err != nil {
  log.Fatalf("error: %v", err)
}
// text
field1: 小韩说课
field2:
  field3: value
  field4:
  - 42
  - 1024

完!
原文出自:小韩说课
微信关注:小韩说课

小韩说课


文章转载自红牛编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论