简介
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的缩写。相比JSON格式的方便。
语法
- 内容是大小写敏感
- 使用缩进表示层级关系(有点像Python缩进)
- 缩进只允许空格,不能使用tab代替
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- 注释使用"#"
- key后面冒号要加一个空格
数据类型
YAML 支持以下常用几种数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
纯量
key对应value
name: opcai
使用缩进的方式
name: opcai
纯量是最基本的,不可再分的值,包括:
- 字符串
- 布尔值
- 整数
- 浮点数
- Null
- 时间
- 日期
对象
account: { name: opcai }
使用缩进方式
account: name: opcai
数组
以 - 开头的行表示构成一个数组
opcai: - linux - golang - python
也可以使用[]
opcai: [ linux , golang , python ]
数据里面也可以包含对象
opcai: - linux: manjaro - golang: gin - python: django
Go处理 YAML
Go有开源的第三方库可以直接操作YAML
gopkg.in/yaml.v3
例如:
有配置文件是app.yaml
mysql: host: "127.0.0.1" port: 3306 user: root passowrd: opcai db_name: opcai
Go读取例子
package mainimport ( "fmt" "io/ioutil" "log" "gopkg.in/yaml.v2")type Config struct { MySQL MySQLConfig `yaml:"mysql"`}type MySQLConfig struct { Host string `yaml:"host"` Port int `yaml:"port"` User string `yaml:"user"` Password string `yaml:"password"` DBName string `yaml:"db_name"`}func main() { fileContent, err := ioutil.ReadFile("app.yaml") if err != nil { log.Panicln(err) } config := Config{} err = yaml.Unmarshal(fileContent, &config) if err != nil { log.Panicln(err) } fmt.Println(config.MySQL.Host, config.MySQL.Port, config.MySQL.User, config.MySQL.Password, config.MySQL.DBName)}
总结
现在很多应用都是使用yaml作为配置文件,还是比较流行的。