package utility import ( "fmt" "github.com/gogf/gf/v2/util/gconv" "reflect" "strings" ) /* * 数字转成固定长度字符串,并在空缺位置补足固定字符串 num 数字 str 空缺替代字符串 l 长度 */ func SuppLenZero(num int64, str string, l int) string { lenStr := gconv.String(num) if len(lenStr) == l { return lenStr } if len(lenStr) < l { count := l - len(lenStr) for i := 0; i < count; i++ { lenStr = str + lenStr } } else { temp := "" for i := 0; i < l; i++ { temp += str } return temp } return lenStr } func CheckNum(num int64) int64 { if num > 100 { return 100 } if num < 0 { return 0 } return num } func FormatStringSliceToSQL(s []string) string { var builder strings.Builder builder.WriteString("(") for i, v := range s { if i > 0 { builder.WriteString(", ") } builder.WriteString("'") builder.WriteString(v) builder.WriteString("'") } builder.WriteString(")") return builder.String() } // FormatSliceToSQL 接受一个任意类型的切片,并将其格式化为类似 ('a', 'b', 'c') 的字符串 func FormatSliceToSQL(slice interface{}) (string, error) { // 使用反射获取切片的类型信息 v := reflect.ValueOf(slice) if v.Kind() != reflect.Slice { return "", fmt.Errorf("input is not a slice") } var builder strings.Builder length := v.Len() for i := 0; i < length; i++ { if i > 0 { builder.WriteString(", ") } element := v.Index(i).Interface() // 根据元素类型进行格式化 switch element.(type) { case string: builder.WriteString("'") builder.WriteString(element.(string)) builder.WriteString("'") case int, int8, int16, int32, int64: builder.WriteString("'") builder.WriteString(gconv.String(reflect.ValueOf(element).Int())) builder.WriteString("'") case uint, uint8, uint16, uint32, uint64: builder.WriteString("'") builder.WriteString(gconv.String(reflect.ValueOf(element).Uint())) builder.WriteString("'") case float32, float64: builder.WriteString("'") builder.WriteString(gconv.String(reflect.ValueOf(element).Float())) builder.WriteString("'") default: return "", fmt.Errorf("unsupported type: %T", element) } } return builder.String(), nil }