package utils import ( "fmt" "strings" "unicode" ) func ConvertToString(v interface{}) string { if v == nil { return "" } switch val := v.(type) { case string: return val case int, int8, int16, int32, int64: return fmt.Sprintf("%d", val) case float32, float64: return fmt.Sprintf("%.0f", val) default: return fmt.Sprintf("%v", val) } } func ConvertToStringSlice(v []interface{}) []interface{} { if v == nil { return []interface{}{} } result := make([]interface{}, 0, len(v)) for _, item := range v { result = append(result, ConvertToString(item)) } return result } func CleanText(text string) string { var builder strings.Builder for _, r := range text { if unicode.IsPrint(r) || r == '\n' || r == '\r' || r == '\t' { builder.WriteRune(r) } else { builder.WriteRune(' ') } } result := builder.String() result = strings.ReplaceAll(result, "\r\n", "\n") result = strings.ReplaceAll(result, "\r", "\n") for strings.Contains(result, "\n\n\n") { result = strings.ReplaceAll(result, "\n\n\n", "\n\n") } for strings.Contains(result, " ") { result = strings.ReplaceAll(result, " ", " ") } return strings.TrimSpace(result) }