【Go学习笔记15】解析yaml

·  阅读 1387

【Go学习笔记15】解析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.1
author:
  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]]
复制代码
分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改