| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package util
-
- import (
- "reflect"
- "strings"
-
- "github.com/iancoleman/strcase"
- )
-
- // GetStructName 获取结构体名称
- func GetStructName(v interface{}) string {
- if v == nil {
- return ""
- }
-
- t := reflect.TypeOf(v)
-
- // 处理指针
- for t.Kind() == reflect.Ptr {
- t = t.Elem()
- }
-
- // 返回结构体名称
- return t.Name()
- }
-
- // GetSnakeName 获取结构体的蛇形命名(snake_case)
- func GetSnakeName(v interface{}) string {
- structName := GetStructName(v)
- return strcase.ToSnake(structName)
- }
-
- // GetCamelName 获取结构体的驼峰命名(camelCase)
- func GetCamelName(v interface{}) string {
- structName := GetStructName(v)
- return strcase.ToLowerCamel(structName)
- }
-
- // GetKebabName 获取结构体的烤肉串命名(kebab-case)
- func GetKebabName(v interface{}) string {
- structName := GetStructName(v)
- return strcase.ToKebab(structName)
- }
-
- // ToSnake 驼峰转蛇形
- func ToSnake(s string) string {
- return strcase.ToSnake(s)
- }
-
- // ToCamel 蛇形转驼峰
- func ToCamel(s string) string {
- return strcase.ToLowerCamel(s)
- }
-
- // ToLowerCamel 下划线转小驼峰
- func ToLowerCamel(s string) string {
- return strcase.ToLowerCamel(s)
- }
-
- // ToKebab 转烤肉串命名
- func ToKebab(s string) string {
- return strcase.ToKebab(s)
- }
-
- // GetCollectionName 获取MongoDB集合名称
- // 可以自定义规则,例如去除特定后缀
- func GetCollectionName(v interface{}) string {
- structName := GetStructName(v)
-
- // 移除常见后缀
- suffixes := []string{"Model", "Entity", "Record", "Document"}
- for _, suffix := range suffixes {
- if strings.HasSuffix(structName, suffix) {
- structName = strings.TrimSuffix(structName, suffix)
- break
- }
- }
-
- // 转换为复数形式(简单规则)
- if !strings.HasSuffix(structName, "s") {
- // 简单的复数化规则
- if strings.HasSuffix(structName, "y") {
- structName = strings.TrimSuffix(structName, "y") + "ies"
- } else {
- structName = structName + "s"
- }
- }
-
- return strcase.ToSnake(structName)
- }
|