Go parse yaml file

后端 未结 4 1004
慢半拍i
慢半拍i 2020-12-28 16:57

I\'m trying to parse a yaml file with Go. Unfortunately I can\'t figure out how. The yaml file I have is this:

---
firewall_network_rules:
  rule1:
    src:          


        
4条回答
  •  清酒与你
    2020-12-28 17:09

    If your YAML file is simple (single nesting) like following

    mongo:
        DB: database
        COL: collection
    log:
        error: log/error/error.log
    api:
        key: jhgwewbcjwefwjfg
    

    Here, you can use interface instead of declaring struct.

    main(){
      config := Config()
      mongoConfig := config["mongo"]
    
      mongo.MongoDial(
        String(
            Get(mongoConfig, "DB")
        ), 
        String(
            Get(mongoConfig, "COL")
        )
      )
    }
    
    func Config() map[string]interface{} {
        filename, _ := filepath.Abs("configs/config.yaml")
        yamlFile, err := ioutil.ReadFile(filename)
    
        if err != nil {
            panic(err)
        }
    
        var config map[string]interface{}
    
        err = yaml.Unmarshal(yamlFile, &config)
        if err != nil {
            panic(err)
        }
    
        return config
    }
    func Get(this interface{}, key string) interface{}  {
        return this.(map[interface{}]interface{})[key]
    }
    func String(payload interface{}) string  {
        var load string
        if pay, oh := payload.(string); oh {
            load = pay
        }else{
            load = ""
        }
        return load
    }
    

    This works fine for level 1 nesting, if you have complex nesting then it is recommended to use struct.

提交回复
热议问题