【Go学习】YAML格式的语法
基本格式
- 用空格缩进, 不能用tab
- 用#标记注释
- 列表: 用短划(-)标记元素
- 映射: 用冒号(:)分隔key, value. 如果写在一行, 需要用逗号分隔并前后加花括号
- 字符串: 不加引号, 加单引号或者加双引号都可以, 加双引号时可以使用\开头的转义字符
- 多行字符串可以用 | 或 > 符号, 紧接着换行符
- 重复的节点, 可以用 & 标识, 并用 * 来引用
基本元素
列表
# 普通 - Casablanca - North by Northwest - The Man Who Wasn't There # 单行 [milk, pumpkin pie, eggs, juice]
men: [John Smith, Bill Jones] women: - Mary Smith - Susan Williams
映射
# Indented Block name: John Smith age: 33 # Inline Block {name: John Smith, age: 33}
- {name: John Smith, age: 33} - name: Mary Smith age: 27
多行字符串
data: | There once was a short man from Ealing Who got on a bus to Darjeeling It said on the door "Please don't spit on the floor" So he carefully spat on the ceiling data: > Wrapped text will be folded into a single paragraph Blank lines denote paragraph breaks
指定类型
a: 123 # an integer b: "123" # a string, disambiguated by quotes c: 123.0 # a float d: !!float 123 # also a float via explicit data type prefixed by (!!) e: !!str 123 # a string, disambiguated by explicit type f: !!str Yes # a string via explicit type g: Yes # a boolean True (yaml1.1), string "Yes" (yaml1.2) h: Yes we have No bananas # a string, "Yes" and "No" disambiguated by context. picture: !!binary | R0lGODdhDQAIAIAAAAAAANn Z2SwAAAAADQAIAAACF4SDGQ ar3xxbJ9p0qa7R0YxwzaFME 1IAADs=
myObject: !myClass { name: Joe, age: 15 }
另一篇简明的介绍, from https://learnxinyminutes.com/docs/yaml/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
--- # document start # Comments in YAML look like this. ################ # SCALAR TYPES # ################ # Our root object (which continues for the entire document) will be a map, # which is equivalent to a dictionary, hash or object in other languages. key: value another_key: Another value goes here. a_number_value: 100 scientific_notation: 1e+12 # The number 1 will be interpreted as a number, not a boolean. if you want # it to be interpreted as a boolean, use true boolean: true null_value: null key with spaces: value # Notice that strings don't need to be quoted. However, they can be. however: 'A string, enclosed in quotes. ' ' Keys can be quoted too. ': "Useful if you want to put a ' : ' in your key." single quotes: ' have '' one '' escape pattern ' double quotes: "have many: \", \0, \t, \u263A, \x0d\x0a == \r\n, and more." # Multiple-line strings can be written either as a ' literal block ' (using |), # or a ' folded block ' (using ' > '). literal_block: | This entire block of text will be the value of the ' literal_block ' key, with line breaks being preserved. The literal continues until de-dented, and the leading indentation is stripped. Any lines that are ' more-indented ' keep the rest of their indentation - these lines will be indented by 4 spaces. folded_style: > This entire block of text will be the value of ' folded_style ', but this time, all newlines will be replaced with a single space. Blank lines, like above, are converted to a newline character. ' More-indented ' lines keep their newlines, too - this text will appear over two lines. #################### # COLLECTION TYPES # #################### # Nesting uses indentation. 2 space indent is preferred (but not required). a_nested_map: key: value another_key: Another Value another_nested_map: hello: hello # Maps don' t have to have string keys. 0.25: a float key # Keys can also be complex, like multi-line objects # We use ? followed by a space to indicate the start of a complex key. ? | This is a key that has multiple lines : and this is its value # YAML also allows mapping between sequences with the complex key syntax # Some language parsers might complain # An example ? - Manchester United - Real Madrid : [2001-01-01, 2002-02-02] # Sequences (equivalent to lists or arrays) look like this # (note that the '-' counts as indentation): a_sequence: - Item 1 - Item 2 - 0.5 # sequences can contain disparate types. - Item 4 - key: value another_key: another_value - - This is a sequence - inside another sequence - - - Nested sequence indicators - can be collapsed # Since YAML is a superset of JSON, you can also write JSON-style maps and # sequences: json_map: { "key" : "value" } json_seq: [3, 2, 1, "takeoff" ] and quotes are optional: {key: [3, 2, 1, takeoff]} ####################### # EXTRA YAML FEATURES # ####################### # YAML also has a handy feature called 'anchors', which let you easily duplicate # content across your document. Both of these keys will have the same value: anchored_content: &anchor_name This string will appear as the value of two keys. other_anchor: *anchor_name # Anchors can be used to duplicate/inherit properties base: &base name: Everyone has same name # The regexp << is called Merge Key Language-Independent Type. It is is used to # indicate that all the keys of one or more specified maps should be inserted # into the current map. foo: &foo <<: *base age: 10 bar: &bar <<: *base age: 20 # foo and bar would also have name: Everyone has same name # YAML also has tags, which you can use to explicitly declare types. explicit_string: !!str 0.5 # Some parsers implement language specific tags, like this one for Python's # complex number type. python_complex_number: !!python/complex 1+2j # We can also use yaml complex keys with language specific tags ? !!python/tuple [5, 7] : Fifty Seven # Would be {(5, 7): 'Fifty Seven'} in Python #################### # EXTRA YAML TYPES # #################### # Strings and numbers aren't the only scalars that YAML can understand. # ISO-formatted date and datetime literals are also parsed. datetime: 2001-12-15T02:59:43.1Z datetime_with_spaces: 2001-12-14 21:59:43.10 -5 date: 2002-12-14 # The !!binary tag indicates that a string is actually a base64-encoded # representation of a binary blob. gif_file: !!binary | R0lGODlhDAAMAIQAAP //9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5 OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+ +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs= # YAML also has a set type, which looks like this: set: ? item1 ? item2 ? item3 or: {item1, item2, item3} # Sets are just maps with null values; the above is equivalent to: set2: item1: null item2: null item3: null ... # document end |
作者:gtea
博客地址:https://www.cnblogs.com/gtea