// Package strx 基于 gstr 提供字符串工具,含命名 // 转换与敏感数据脱敏。 package strx import ( "strings" "github.com/gogf/gf/v2/text/gstr" ) // SnakeCase 将 s 转为 snake_case,如 "UserName" -> "user_name"。 func SnakeCase(s string) string { return gstr.CaseSnake(s) } // CamelCase 将 s 转为 CamelCase,如 "user_name" -> "UserName"。 func CamelCase(s string) string { return gstr.CaseCamel(s) } // LowerCamelCase 将 s 转为 lowerCamelCase,如 "user_name" -> "userName"。 func LowerCamelCase(s string) string { return gstr.CaseCamelLower(s) } // IsEmpty 判断 s 是否为空或仅含空白字符。 func IsEmpty(s string) bool { return strings.TrimSpace(s) == "" } // MaskPhone 对手机号脱敏,保留前 3 位与后 4 位。 // 例如 "13812345678" -> "138****5678"。 func MaskPhone(s string) string { if len(s) < 7 { return s } return s[:3] + "****" + s[len(s)-4:] } // MaskIDCard 对身份证号脱敏,保留前 6 位与后 4 位, // 例如 "110101199003074512" -> "110101********4512"。 func MaskIDCard(s string) string { if len(s) < 10 { return s } return s[:6] + "********" + s[len(s)-4:] } // MaskName 对中文姓名脱敏,仅保留首字符。 // e.g. "张三丰" -> "张**". func MaskName(s string) string { r := []rune(s) if len(r) <= 1 { return s } return string(r[0]) + strings.Repeat("*", len(r)-1) }