// 从Reader读取YAML func ReadYmlReader(path string) (cnf map[string]interface{}, err error) { err = nil f, err := os.Open(path) if err != nil { return } defer f.Close() err = nil buf, err := ioutil.ReadAll(f) if err != nil || len(buf) < 3 { return } if string(buf[0:1]) == "{" { log.Println("Look lile a Json, try it") err = json.Unmarshal(buf, &cnf) if err == nil { log.Println("It is Json Map") return } } _map, _err := goyaml2.Read(bytes.NewBuffer(buf)) if _err != nil { log.Println("Goyaml2 ERR>", string(buf), _err) //err = goyaml.Unmarshal(buf, &cnf) err = _err return } if _map == nil { log.Println("Goyaml2 output nil? Pls report bug\n" + string(buf)) } cnf, ok := _map.(map[string]interface{}) if !ok { log.Println("Not a Map? >> ", string(buf), _map) cnf = nil } return }
// ReadYmlReader Read yaml file to map. // if json like, use json package, unless goyaml2 package. func ReadYmlReader(path string) (cnf map[string]interface{}, err error) { f, err := os.Open(path) if err != nil { return } defer f.Close() buf, err := ioutil.ReadAll(f) if err != nil || len(buf) < 3 { return } if string(buf[0:1]) == "{" { log.Println("Look like a Json, try json umarshal") err = json.Unmarshal(buf, &cnf) if err == nil { log.Println("It is Json Map") return } } data, err := goyaml2.Read(bytes.NewBuffer(buf)) if err != nil { log.Println("Goyaml2 ERR>", string(buf), err) return } if data == nil { log.Println("Goyaml2 output nil? Pls report bug\n" + string(buf)) return } cnf, ok := data.(map[string]interface{}) if !ok { log.Println("Not a Map? >> ", string(buf), data) cnf = nil } cnf = config.ExpandValueEnvForMap(cnf) return }