golang yaml配置文件解析
yaml文件语法
此模块内容转自:http://www.ruanyifeng.com/blog/2016/07/yaml.html
1 大小写敏感 2 使用缩进表示层级关系 3 缩进时不允许使用Tab键,只允许使用空格。 4 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#
表示注释,从这个字符一直到行尾,都会被解析器忽略。
YAML 支持的数据结构有三种
1 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary) 2 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list) 3 纯量(scalars):单个的、不可再分的值
对象
对象的一组键值对,使用冒号结构表示。
animal: pets
转为 JavaScript 如下。
{ animal: 'pets' }
Yaml 也允许另一种写法,将所有键值对写成一个行内对象。
hash: { name: Steve, foo: bar }
转为 JavaScript 如下。
{ hash: { name: 'Steve', foo: 'bar' } }
数组
一组连词线开头的行,构成一个数组。
- Cat - Dog - Goldfish
转为 JavaScript 如下。
[ 'Cat', 'Dog', 'Goldfish' ]
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。
- - Cat - Dog - Goldfish
转为 JavaScript 如下。
[ [ 'Cat', 'Dog', 'Goldfish' ] ]
数组也可以采用行内表示法。
animal: [Cat, Dog]
转为 JavaScript 如下。
{ animal: [ 'Cat', 'Dog' ] }
复合结构
对象和数组可以结合使用,形成复合结构。
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
转为 JavaScript 如下。
{ languages: [ 'Ruby', 'Perl', 'Python' ],
websites:
{ YAML: 'yaml.org',
Ruby: 'ruby-lang.org',
Python: 'python.org',
Perl: 'use.perl.org' } }
golang解析库
https://github.com/go-yaml/yaml
1 #冒号后面一定要有空格 2 #缩进要用空格 3 GIN_MODE: release 4 AUTHORS: ["hankangkang","zhaozilong"] 5 AGE: 25 6 DEV: 7 PASSAORD: 123 8 TEST: 9 PASSWORD: 45
1 //yaml后面的自动要被双引号包裹 2 3 type Pwd struct { 4 Password int `yaml:"PASSAORD"` 5 } 6 type Env struct { 7 GinMode string `yaml:"GIN_MODE"` 8 Authors []string `yaml:"AUTHORS"` 9 Age int `yaml:"AGE"` 10 Dev Pwd `yaml:"DEV"` 11 Test Pwd `yaml:"TEST"` 12 13 } 14 15 fun main(){ 16 content,_ := ioutil.ReadFile("env.yaml") 17 env := Env{} 18 err := yaml.Unmarshal(content, &env) 19 20 fmt.Println(err, env) 21 return ; 22 } 23 24 //输出 25 <nil> {release [hankangkang zhaozilong] 25 {123} {0}}