package helper import ( "fmt" "strings" ) func ArrDeduplication[T int | int32 | uint32 | uint64 | int64 | int8 | string](arr []T) []T { seen := map[T]bool{} var result []T for _, num := range arr { if !seen[num] { seen[num] = true result = append(result, num) } } return result } // BuildStr 函数用于将 uid 和 arr 中的元素拼接成一个字符串 func BuildStr[T int | int32 | uint32 | uint64 | int64 | int8 | string](uid string, arr []T) string { // 创建一个 strings.Builder 实例,用于高效地构建字符串 var sb strings.Builder // 写入初始的 uid sb.WriteString(uid) // 遍历 arr 切片中的每个元素 for i, id := range arr { // 如果不是第一个元素,先写入下划线分隔符 if i > 0 { sb.WriteByte('_') } else if sb.Len() > 0 { // 如果 uid 不为空且是第一个元素,也写入下划线分隔符 sb.WriteByte('_') } // 根据元素的类型进行不同的处理 switch v := any(id).(type) { case string: // 如果是字符串类型,直接写入 sb.WriteString(v) default: // 对于其他类型,使用 fmt.Sprint 转换为字符串后写入 sb.WriteString(fmt.Sprint(v)) } } // 将 strings.Builder 中的内容转换为字符串并返回 return sb.String() }