Go语言解析YAML

幸运草 2020年4月22日22:07:55函数代码评论阅读模式
本篇解析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{42, 1024}
}
}
text, err = yaml.Marshal(&data)
if err != nil {
log.Fatalf("error: %v", err)
}
// text
field1: 小韩说课
field2:
field3: value
field4:
- 42
- 1024

特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
幸运草
Go语言中的常量 函数代码

Go语言中的常量

1 概述 常量,一经定义不可更改的量。功能角度看,当出现不需要被更改的数据时,应该使用常量进行存储,例如圆周率。从语法的角度看,使用常量可以保证数据,在整个运行期间内,不会被更改。例如当前处理器的架构...
Go语言的接口 函数代码

Go语言的接口

Go语言-接口 在Go语言中,一个接口类型总是代表着某一种类型(即所有实现它的类型)的行为。一个接口类型的声明通常会包含关键字type、类型名称、关键字interface以及由花括号包裹的若干方法声明...
Go语言支持的正则语法 函数代码

Go语言支持的正则语法

1 字符 语法 说明 . 任意字符,在单行模式(s标志)下,也可以匹配换行 字符类 否定字符类 d Perl 字符类 D 否定 Perl 字符类 ASCII 字符类 否定 ASCII 字符类 pN U...
Go语言的包管理 函数代码

Go语言的包管理

1 概述 Go 语言的源码复用建立在包(package)基础之上。包通过 package, import, GOPATH 操作完成。 2 main包 Go 语言的入口 main() 函数所在的包(pa...

发表评论