package yaml import ( "bytes" "errors" "fmt" "gopkg.in/yaml.v3" "io" "os" "reflect" ) func LoadYamlFile(yamlFilePath string, retObjects *[]any) error { yamlFile, err := os.Open(yamlFilePath) if err != nil { return err } defer func(yamlFile *os.File) { err := yamlFile.Close() if err != nil { fmt.Println(err) } }(yamlFile) return loadYaml(yamlFile, retObjects) } func LoadYamlBytes(yamlBytes []byte, retObjects *[]any) error { return loadYaml(bytes.NewReader(yamlBytes), retObjects) } func loadYaml(r io.Reader, retObjects *[]any) error { decoder := yaml.NewDecoder(r) for i := 0; i < len(*retObjects); i++ { retObject := (*retObjects)[i] retObjectType := reflect.TypeOf(retObject) if retObjectType.Kind() != reflect.Ptr || retObjectType.Kind() != reflect.Map { return errors.New("返回对象slice元素需要指针") } err := decoder.Decode(retObject) if err != nil { if err == io.EOF { break } return err } } return nil }