YAML介绍
YAML实质上是一种通用的数据串行化格式,它的基本语法规则如下:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用tab键,只允许使用空格
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- 符号#表示注释,从这个字符一直到行尾,都会被解析器忽略
YAML支持Go
yaml包可以编码和解码YAML值,它基于著名的libyaml c库来解析和生成YAML数据。
兼容性
yaml包支持大多数YAML1.1和1.2,包括支持anchors,tags,map合并等,但是多文档解析还没有实现。
安装使用
安装gopkg.in/yaml.v2
,可以运行命令go get gopkg.in/yaml.v2
。具体的接口文档可以查看https://gopkg.in/yaml.v2。
演示
test.yml文件
name: 'benben_2015'
website: 'www.csdn.com'
year: 2015
favourite:
- 'play games'
- 'programming'
- 'reading'
main文件和test.yml在同一目录下
package main
import (
"fmt"
"io/ioutil"
"gopkg.in/yaml.v2"
)
type CSDN struct {
Name string
WebSite string
Year int
Favourite []string
}
func main() {
content, err := ioutil.ReadFile("./test.yml")
if err != nil {
fmt.Println(err)
}
csdn := CSDN{}
yaml.Unmarshal(content, &csdn)
fmt.Println(csdn.Name)
fmt.Println(csdn.Favourite)
}
beego支持yaml
安装使用
beego支持解析的文件格式有ini,json,xml,yaml,可以通过如下方式进行安装,go get github.com/astaxie/beego/config
。使用yaml驱动就需要手工安装引入包go get -u github.com/astaxie/beego/config/yaml
演示
yaml文件相同还是用上面的代码,而main文件有变化。
package main
import (
"fmt"
"github.com/astaxie/beego/config/yaml"
)
type CSDN struct {
Name string
WebSite string
Year int
Favourite []string
}
func main() {
conf, err := yaml.ReadYmlReader("./test.yml")
if err != nil {
fmt.Println(err)
}
name := conf["name"]
favourite := conf["favourite"]
fmt.Println(name)
fmt.Println(favourite)
}
但是它对一些复杂的结构还不支持,例如不支持map列表。