【Go学习笔记15】解析yaml

【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]]
复制代码

转载于:https://juejin.im/post/5a4daab86fb9a04514647360

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值