Bez popisu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

modle_util.go 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package util
  2. import (
  3. "reflect"
  4. "strings"
  5. "github.com/iancoleman/strcase"
  6. )
  7. // GetStructName 获取结构体名称
  8. func GetStructName(v interface{}) string {
  9. if v == nil {
  10. return ""
  11. }
  12. t := reflect.TypeOf(v)
  13. // 处理指针
  14. for t.Kind() == reflect.Ptr {
  15. t = t.Elem()
  16. }
  17. // 返回结构体名称
  18. return t.Name()
  19. }
  20. // GetSnakeName 获取结构体的蛇形命名(snake_case)
  21. func GetSnakeName(v interface{}) string {
  22. structName := GetStructName(v)
  23. return strcase.ToSnake(structName)
  24. }
  25. // GetCamelName 获取结构体的驼峰命名(camelCase)
  26. func GetCamelName(v interface{}) string {
  27. structName := GetStructName(v)
  28. return strcase.ToLowerCamel(structName)
  29. }
  30. // GetKebabName 获取结构体的烤肉串命名(kebab-case)
  31. func GetKebabName(v interface{}) string {
  32. structName := GetStructName(v)
  33. return strcase.ToKebab(structName)
  34. }
  35. // ToSnake 驼峰转蛇形
  36. func ToSnake(s string) string {
  37. return strcase.ToSnake(s)
  38. }
  39. // ToCamel 蛇形转驼峰
  40. func ToCamel(s string) string {
  41. return strcase.ToLowerCamel(s)
  42. }
  43. // ToLowerCamel 下划线转小驼峰
  44. func ToLowerCamel(s string) string {
  45. return strcase.ToLowerCamel(s)
  46. }
  47. // ToKebab 转烤肉串命名
  48. func ToKebab(s string) string {
  49. return strcase.ToKebab(s)
  50. }
  51. // GetCollectionName 获取MongoDB集合名称
  52. // 可以自定义规则,例如去除特定后缀
  53. func GetCollectionName(v interface{}) string {
  54. structName := GetStructName(v)
  55. // 移除常见后缀
  56. suffixes := []string{"Model", "Entity", "Record", "Document"}
  57. for _, suffix := range suffixes {
  58. if strings.HasSuffix(structName, suffix) {
  59. structName = strings.TrimSuffix(structName, suffix)
  60. break
  61. }
  62. }
  63. // 转换为复数形式(简单规则)
  64. if !strings.HasSuffix(structName, "s") {
  65. // 简单的复数化规则
  66. if strings.HasSuffix(structName, "y") {
  67. structName = strings.TrimSuffix(structName, "y") + "ies"
  68. } else {
  69. structName = structName + "s"
  70. }
  71. }
  72. return strcase.ToSnake(structName)
  73. }