yaml.go 923 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package yaml
  2. import (
  3. "bytes"
  4. "errors"
  5. "fmt"
  6. "gopkg.in/yaml.v3"
  7. "io"
  8. "os"
  9. "reflect"
  10. )
  11. func LoadYamlFile(yamlFilePath string, retObjects *[]any) error {
  12. yamlFile, err := os.Open(yamlFilePath)
  13. if err != nil {
  14. return err
  15. }
  16. defer func(yamlFile *os.File) {
  17. err := yamlFile.Close()
  18. if err != nil {
  19. fmt.Println(err)
  20. }
  21. }(yamlFile)
  22. return loadYaml(yamlFile, retObjects)
  23. }
  24. func LoadYamlBytes(yamlBytes []byte, retObjects *[]any) error {
  25. return loadYaml(bytes.NewReader(yamlBytes), retObjects)
  26. }
  27. func loadYaml(r io.Reader, retObjects *[]any) error {
  28. decoder := yaml.NewDecoder(r)
  29. for i := 0; i < len(*retObjects); i++ {
  30. retObject := (*retObjects)[i]
  31. if reflect.TypeOf(retObject).Kind() != reflect.Ptr {
  32. return errors.New("返回对象slice元素需要指针")
  33. }
  34. err := decoder.Decode(retObject)
  35. if err != nil {
  36. if err == io.EOF {
  37. break
  38. }
  39. return err
  40. }
  41. }
  42. return nil
  43. }