将配置yaml文件内容解析为我们定义好的struct,这种比较简单,如果想获取对应的值,直接获取即可。

二.实现步骤

  • 首先根据配置文件的内容定义一个结构体Config,结构体类型和yaml中的属性配置了映射,这样后面解析的时候可以将值设置到对应的属性上
  • 通过ioutil的ReadFile方法读取配置文件的内容
  • 定义一个结构体变量
  • 调用yaml的Unmarshal方法来解析文件的数据到结构体对象config中,注意这里必须传递结构体对下的地址&config。

三.举例说明

这里,我们定义一个yaml配置文件:

cat config.yaml
app:
  name: demoApp  
memcache:
  enable : false
  list : [redis, rabbitmq]
mysql:
  user : root
  password : mypassword
  host : 192.168.1.1
  port : 3306
  dbname : mydb1
package main 

import (
	"fmt"
	"io/ioutil"
	"log"
	yaml "gopkg.in/yaml.v2"
)

type Config struct {
	App struct {
		Name string `yaml:"name"`
	}
	MemCache struct {
		Enable bool `yaml:"enable"`
		List []string `yaml:"list"`
	}
	Mysql struct {
		User string `yaml:"user"`
		PassWord string `yaml:"password"`
		Host string `yaml:"host"`
		Port int32 `yaml:"port"`
		DbName string `yaml:"dbname"`
	}
}

func main() {
	var config Config
	File, err := ioutil.ReadFile("config.yml")
	if err != nil {
		log.Printf("读取配置文件失败 #%v", err)
	}
	err = yaml.Unmarshal(File, &config)
	if err != nil {
		log.Fatalf("解析失败: %v", err)
	}
	fmt.Printf("App name is: %v\n", config.App.Name)
	fmt.Printf("Mysql port is: %d\n", config.Mysql.Port)
}