golang中解析yaml配置文件


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Raily_Qi/article/details/96333773

解析简单的Yaml文件
首先看一个简单的例子,现在我们有一个config.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 结构体来进行解析。

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐