簡介
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作為配置檔案,還是比較流行的。
最新評論