59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
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)
|
|
} |