utils.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package schema
  2. import (
  3. "reflect"
  4. "regexp"
  5. "strings"
  6. )
  7. func ParseTagSetting(str string, sep string) map[string]string {
  8. settings := map[string]string{}
  9. names := strings.Split(str, sep)
  10. for i := 0; i < len(names); i++ {
  11. j := i
  12. if len(names[j]) > 0 {
  13. for {
  14. if names[j][len(names[j])-1] == '\\' {
  15. i++
  16. names[j] = names[j][0:len(names[j])-1] + sep + names[i]
  17. names[i] = ""
  18. } else {
  19. break
  20. }
  21. }
  22. }
  23. values := strings.Split(names[j], ":")
  24. k := strings.TrimSpace(strings.ToUpper(values[0]))
  25. if len(values) >= 2 {
  26. settings[k] = strings.Join(values[1:], ":")
  27. } else if k != "" {
  28. settings[k] = k
  29. }
  30. }
  31. return settings
  32. }
  33. func checkTruth(val string) bool {
  34. if strings.ToLower(val) == "false" {
  35. return false
  36. }
  37. return true
  38. }
  39. func toColumns(val string) (results []string) {
  40. if val != "" {
  41. for _, v := range strings.Split(val, ",") {
  42. results = append(results, strings.TrimSpace(v))
  43. }
  44. }
  45. return
  46. }
  47. func removeSettingFromTag(tag reflect.StructTag, name string) reflect.StructTag {
  48. return reflect.StructTag(regexp.MustCompile(`(?i)(gorm:.*?)(`+name+`:.*?)(;|("))`).ReplaceAllString(string(tag), "${1}${4}"))
  49. }