golang中解析yaml配置文件
username: raily
password: 123a
那么我们可以像下边这样解析:
type Config struct{
Username string `yaml:"username"`
Password string `yaml:"password"`
}
var DatabaseConfig *Config
//解析函数
func Load(path string) error{
conf := new(Config)
yamlFile, err := ioutil.ReadFile(path)
if err != nil {
log.Println("yamlFile.Get err:", err)
return err
}
err = yaml.Unmarshal(yamlFile, conf)
if err != nil {
log.Fatal("Unmarshal:", err)
return err
}
DatabaseConfig = conf
return err
}
解析嵌套的Yaml文件
上面的例子只是解析了最简单的Yaml文件,没有嵌套的Yaml文件,但是实际应用中,嵌套的情况经常出现。
假设yaml配置文件config.yaml的内容为:
redis:
address: 127.0.0.0
password: 123a
mysql:
username: momo
password: 123a
解析过程中,我们只需改变Config的结构体即可,解析函数参照上边的例子。解析的结构体可写为以下两种格式。
type Config struct{
Redis struct{
Address string `yaml:"address"`
Password string `yaml:"password"`
}
Mysql struct{
Username string `yaml:"username"`
Password string `yaml:"password"`
}
}
或者:
type Config struct{
Redis Redis `yaml:"redis"` //或者:`yaml:"redis, inline"`
Mysql Mysql `yaml:"mysql"` //或者:`yaml:"mysql, inline"`
}
type Redis struct{
Address string `yaml:"address"`
Password string `yaml:"password"`
}
type Mysql struct{
Username string `yaml:"username"`
Password string `yaml:"password"`
}
然后用上例中的Load函数进行解析即可。
将yaml配置内容解析到map对象中
如果懒得去写struct进行Unmarshal,也可以直接声明一个map对象:
resultMap := make(map[string]interface{}),代替struct 结构体来进行解析。