您的位置:首页 > 编程语言 > Go语言

【Go学习笔记13】解析yaml

2018-01-04 00:00 239 查看

【Go学习笔记13】解析yaml

在项目中,难免会用到配置文件,目前来说,yaml格式的配置文件应该是最流行的,那么在Go中如何来解析yaml配置文件呢。

解析yaml文件

假设我们现在有一个config.dev.yaml的配置文件,里面的内容如下:

version: 0.0.1

那么我们可以像下面这样来解析:

package main

import (
"fmt"
"log"

"gopkg.in/yaml.v2"
"io/ioutil"
)

type Config struct {
Version string `yaml:"version"`
}

func main() {
t := Config{}
buffer, err := ioutil.ReadFile("./config.dev.yaml")
err = yaml.Unmarshal(buffer, &t)
if err != nil {
log.Fatalf(err.Error())
}
fmt.Printf(t.Version)
}

上面的代码中,首先定义了一个自定义类型Config,这个类型和yaml中的属性配置了映射,这样在后面解析的时候就可以将值设置到对应的属性上。在main方法中,首先通过ioutil的ReadFile方法来读取配置文件的数据,然后再调用yaml的Unmarshal方法来解析数据到对象t中,注意这里必须传递t的地址(&t),这种形式,否则会报错。

解析嵌套的yaml

上面的例子只是解析了最简单的,没有嵌套结果的yaml配置文件,但是在实际的开发过程中,嵌套的yaml配置文件经常出现。下面来看下如何解析嵌套的yaml配置文件。

假设我们有一个config.dev.yaml的文件,内容如下:

version: 0.0.1author:
name: zhongzhong
age: 25

那么我们可以使用下面的代码来解析:

package main

import (
"fmt"
"log"

"gopkg.in/yaml.v2"
"io/ioutil"
)

type Config struct {
Version string `yaml:"version"`
Author struct {
Name string `yaml:"name"`
Age int 	`yaml:"age"`
}
}

func main() {
t := Config{}
buffer, err := ioutil.ReadFile("./config.dev.yaml")
err = yaml.Unmarshal(buffer, &t)
if err != nil {
log.Fatalf(err.Error())
}
fmt.Printf("%v",t)
}

输出结果:

{0.0.1 {zhongzhong 25}}

将yaml配置内容解析到map对象中

上面的例子,我们都需要定义一个自定义类型,然后还需要配置映射,有时候感觉会很麻烦,那么我们就可以将yaml解析到一个map对象中。

还是上面的配置内容,可以使用 下面的代码来将内容解析到一个map对象中:

package main

import (
"fmt"
"log"

"gopkg.in/yaml.v2"
"io/ioutil"
)

func main() {
t := map[string]interface{}{}
buffer, err := ioutil.ReadFile("./config.dev.yaml")
err = yaml.Unmarshal(buffer, &t)
if err != nil {
log.Fatalf(err.Error())
}
fmt.Printf("%v",t)
}

输出结果:

map[version:0.0.1 author:map[name:zhongzhong age:25]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Go YAML