yaml 总结

YAML以数据为中心,使用空白,缩进,分行组织数据,多用于api接口的定义。
  • 1 大小写敏感
  • 2 使用缩进表示层级关系
  • 3 禁止使用tab缩进,只能使用空格键
  • 4 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级
  • 5 使用#表示注释
  • 6 字符串可以不用引号标注
读取yaml数据
  • 1 demo.yaml
- name: wanger
  age: 24
  address: beijing
  hobby:
    - literature
    - social
- name: 冬哥
  age: 30
  address: chengdu
  hobby:
    - basketball
    - guitar
  • 2 main.go
type YamlDemo struct {
    Name    string   `yaml:"yaml"`
    Age     int8     `yaml:"age"`
    Address string   `yaml:"address"`
    Hobby   []string `yaml:"hobby"`
}

func main() {
    file, _ := ioutil.ReadFile("C:/Users/sosmy/Desktop/go/go_code/nats_api/demo.yaml")
    var data []YamlDemo
    _ = yaml.Unmarshal(file, &data)
    for _, v := range data {
        fmt.Println("取出值:", v)
    }
}
生成yaml文件
type YamlDemo struct {
    Name    string   `yaml:"yaml"`
    Age     int8     `yaml:"age"`
    Address string   `yaml:"address"`
    Hobby   []string `yaml:"hobby"`
}

func main() {
    v1 := YamlDemo{
        Name:    "莉莉周",
        Age:     18,
        Address: "深圳市",
        Hobby:   []string{"游泳", "看书"},
    }

    v2 := YamlDemo{
        Name:    "莉莉周2",
        Age:     17,
        Address: "耒阳市",
        Hobby:   []string{"上网", "玩车"},
    }
    val := []YamlDemo{v1, v2}
    yamlData, _ := yaml.Marshal(&val)
    fmt.Println(string(yamlData))
    filename := "C:/Users/sosmy/Desktop/go/go_code/nats_api/demo2.yaml"
    _ = ioutil.WriteFile(filename, yamlData, 0644)
}
把数据映射在结构体上,写进yaml文件
func main() {
    //注意缩进!
    str := `
age : 12346
name : aa
`
    type P struct {
        Name string
        Age  int
    }
    var p P
    _ = yaml.Unmarshal([]byte(str), &p) //映射到结构体上
    filename := "C:/Users/sosmy/Desktop/go/go_code/nats_api/demo3.yaml"
    v, _ := yaml.Marshal(&p)
    _ = ioutil.WriteFile(filename, v, 0644)
}
把切片数据写入yaml文件
func main() {
    str := `
- a
- b
- 12
`
    var p []string
    _ = yaml.Unmarshal([]byte(str), &p)
    b, _ := yaml.Marshal(&p)
    filename := "C:/Users/sosmy/Desktop/go/go_code/nats_api/demo4.yaml"
    _ = ioutil.WriteFile(filename, b, 0644)
}
把map嵌套map 写入yaml文件
func main() {
   // 注意缩进
    str := `
websites:
 YAML: yaml.org 
 Ruby: ruby-lang.org 
 Python: python.org 
 Perl: use.perl.org 
`
    var p map[string]map[string]string
    _ = yaml.Unmarshal([]byte(str), &p)
    b, _ := yaml.Marshal(&p)
    filename := "C:/Users/sosmy/Desktop/go/go_code/nats_api/demo4.yaml"
    _ = ioutil.WriteFile(filename, b, 0666)
}
map嵌套list 写入yaml文件
func main() {
    str := `
languages:
 - Ruby
 - Perl
 - Python 
 - c
`
    var p map[string][]string
    _ = yaml.Unmarshal([]byte(str), &p)
    b, _ := yaml.Marshal(&p)
    filename := "C:/Users/sosmy/Desktop/go/go_code/nats_api/demo.yaml"
    _ = ioutil.WriteFile(filename, b, 0666)
}
list 嵌套list
func main() {
    str := `
-
  - Ruby
  - Perl
  - Python 
- 
  - c
  - c++
  - java
`
    var p [][]string
    _ = yaml.Unmarshal([]byte(str), &p)
    b, _ := yaml.Marshal(&p)
    filename := "C:/Users/sosmy/Desktop/go/go_code/nats_api/demo4.yaml"
    _ = ioutil.WriteFile(filename, b, 0666)
}
list 嵌套map
func main() {
    str := `
-
  id: 1
  name: huang
-
  id: 2
  name: liao
`
    var p []map[string]string
    _ = yaml.Unmarshal([]byte(str), &p)
    b, _ := yaml.Marshal(&p)
    filename := "C:/Users/sosmy/Desktop/go/go_code/nats_api/demo4.yaml"
    _ = ioutil.WriteFile(filename, b, 0666)
}
关于 - + >
  • 1 +表示保留文字块末尾的换行
  • 2 - 会删除文字块后面的换行
  • 3 > 会将文字块后的换行更改成空格,最终成一行!
锚点与引用, * 用来引用锚点
name: &a yaml
book: *a
books: 
   - java
   - *a
   - python

输出book: yaml 
输出books:[java,yaml,python]
注意*引用部分不能追加内容
  • 4 demo
func main() {
    str := `
name: &a yaml
book: *a
books: 
   - java
   - *a
   - python
`

    type P struct {
        Name  string
        Book  string
        Books []string
    }
    var p P
    _ = yaml.Unmarshal([]byte(str), &p)
    b, _ := yaml.Marshal(&p)
    filename := "C:/Users/sosmy/Desktop/go/go_code/nats_api/demo4.yaml"
    _ = ioutil.WriteFile(filename, b, 0666)
}
  • demo.yaml文件
name: yaml
book: yaml
books:
    - java
    - yaml
    - python
单引号,双引号
  • 1 单引号会转义,双引号不会转义
# YAML
s1: '内容\n字符串'
s2: "内容\n字符串"
数据类型表示
  • 布尔值
#YAML
isTrue: true
isTrue: false
  • 数字
12 #整数 
014 # 八进制整数 
0xC #十六进制整数 
13.4 #浮点数 
1.2e+34 #指数 
.inf空值 #无穷大
#YAML
int: 10
float: 1.23
double: 2.34
  • 空值 null或~表示
# YAML
person: ~
  • 时间使用 iso-8601 标准表示
#YAML
iso8601: 2018-05-20t10:59:43.10-05:00
  • 日期采用ISO8601的格式yyyy-MM-dd表示
#YAML
date: 2018-05-20
  • YAML 允许使用个感叹号!,强制转换数据类型,单叹号通常是自定义类型,双叹号是内置类型
money: !!str
123
date: !Boolean
true
内置类型:
!!int # 整数类型 
!!float # 浮点类型 
!!bool # 布尔类型 
!!str # 字符串类型 
!!binary # 也是字符串类型 
!!timestamp # 日期时间类型 
!!null # 空值 
!!set # 集合 
!!omap,!!pairs # 键值列表或对象列表
!!seq # 序列,也是列表 !!map # 键值表

你可能感兴趣的:(yaml 总结)