Golang解析yaml檔案
阿新 • • 發佈:2021-10-09
一.具體思路
將配置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) }