一.具體思路
將配置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)
}