package utils 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) }