1. 程式人生 > 其它 >Golang解析yaml檔案

Golang解析yaml檔案

一.具體思路

將配置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)
}