yaml 包使 Go 程序能够轻松地对 YAML 值进行编码和解码。它是在Canonical内部开发的,作为juju项目的一部分,基于著名的libyaml C 库的纯 Go 端口,可快速可靠地解析和生成 YAML 数据。
地址:yaml.v2
下面是github上的基本用例改编:
#yaml文件
listen: ':8050'
secret_key: 123
bowls: false
strslice:
- 'asd'
- 'qwe'
auth:
- id: 'root'
password: '456'
roles:
- 'admin'
- id: 'cjs'
password: '123'
roles:
- 'one'
keymap:
a: 'xml'
b: 'opi'
c: 'edg'
package main
import (
"fmt"
"io/ioutil"
"gopkg.in/yaml.v2"
"log"
)
type user struct {
Id string `yaml:"id"`
Password string `yaml:"password"`
Roles []string `yaml:"roles"`
}
type Config struct {
Listen string `yaml:"listen"`
SecretKey int `yaml:"secret_key"`
Boll bool `yaml:"bowls"`
StrSlice []string `yaml:"strslice"`
Auth []user `yaml:"auth"`
KeyMap map[string]string `yaml:"keymap"`
}
func main() {
data, err := ioutil.ReadFile("temp.yaml")
if err != nil {
return
}
conf := &Config{}
if err := yaml.Unmarshal([]byte(data), &conf); err != nil { //解析yaml文件
return
}
fmt.Printf("--- m:%v\n",conf)
d, err := yaml.Marshal(&conf) //序列化yaml
if err != nil {
log.Fatalf("error: %v", err)
}
fmt.Printf("--- m dump:\n%s\n\n", string(d))
return
}
yaml文件的序列化与反序列化,与json库的使用方式相同
yaml编写的语法需要自己学一下:YAML 入门教程
基本也就对象,也就是键值对(类似map)、数组、单独的纯量
再就上复杂的组合类型,都是从上边组合的,比较简单
可以使用YAML、YML在线编辑(校验)器进行校验是否正确