yaml作为配置文件,基本在go中,被认为默认的配置文件格式了。
yaml格式介绍,详见 https://www.ruanyifeng.com/blog/2016/07/yaml.html
基本语法规则如下:
大小写敏感
使用空格缩进表示层级关系
缩进的空格数目不重要,只要相同层级的元素左侧对齐就可以了。
我们看下面的yaml文件,新建redis.yaml文件
---
users:
- name: "hi"
age: 1
- name: "fff"
age: 2
redis:
base:
addr: "test.redis.com:6379"
password: "pwd"
db: "1"
1、--- 是yaml文件的开头
2、- 是数组元素
熟悉json,不熟悉yaml的人,可以转一下json,验证一下数据的准确性。
通过在线 yaml转 json格式 https://www.bejson.com/validators/yaml_editor/
可以看一下对应的json格式是
{
"users": [
{
"name": "hi",
"age": 1
},
{
"name": "fff",
"age": 2
}
],
"redis": {
"base": {
"addr": "test.redis.com:6379",
"password": "pwd",
"db": "1"
}
}
}
我们使用 https://github.com/go-yaml/yaml 作为读取yaml的库。
import (
"gopkg.in/yaml.v3"
"io/ioutil"
"testing"
)
func TestYaml(t *testing.T) {
//1读取文件
data, err := ioutil.ReadFile("redis.yaml")
if err != nil {
t.Log(err)
}
t.Log(string(data))
//2解析文件
var y YamlFile
err = yaml.Unmarshal(data, &y)
t.Log(y, err)
}
type YamlFile struct {
Users []struct {
Name string
Age int
}
Redis struct {
Base struct {
Addr string
Password string
Db string
}
}
}
输出:
---
users:
- name: "hi"
age: 1
- name: "fff"
age: 2
redis:
base:
addr: "test.redis.com:6379"
password: "pwd"
db: "1"
{[{hi 1} {fff 2}] {{test.redis.com:6379 pwd 1}}} <nil>