127 lines
3.1 KiB
Go
127 lines
3.1 KiB
Go
package datasource
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// PageNumSize 分页页码记录数
|
|
func PageNumSize(pageNum, pageSize any) (int, int) {
|
|
// 记录起始索引
|
|
pageNumStr := fmt.Sprintf("%v", pageNum)
|
|
num := 1
|
|
if v, err := strconv.Atoi(pageNumStr); err == nil && v > 0 {
|
|
num = v
|
|
}
|
|
|
|
// 显示记录数
|
|
pageSizeStr := fmt.Sprintf("%v", pageSize)
|
|
size := 10
|
|
if v, err := strconv.Atoi(pageSizeStr); err == nil && v > 0 {
|
|
size = v
|
|
}
|
|
return num - 1, size
|
|
}
|
|
|
|
// SetFieldValue 判断结构体内是否存在指定字段并设置值
|
|
func SetFieldValue(obj any, fieldName string, value any) {
|
|
// 获取结构体的反射值
|
|
userValue := reflect.ValueOf(obj)
|
|
|
|
// 获取字段的反射值
|
|
fieldValue := userValue.Elem().FieldByName(fieldName)
|
|
|
|
// 检查字段是否存在
|
|
if fieldValue.IsValid() && fieldValue.CanSet() {
|
|
// 获取字段的类型
|
|
fieldType := fieldValue.Type()
|
|
|
|
// 转换传入的值类型为字段类型
|
|
switch fieldType.Kind() {
|
|
case reflect.String:
|
|
if value == nil {
|
|
fieldValue.SetString("")
|
|
} else {
|
|
fieldValue.SetString(fmt.Sprintf("%v", value))
|
|
}
|
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
intValue, err := strconv.ParseInt(fmt.Sprintf("%v", value), 10, 64)
|
|
if err != nil {
|
|
intValue = 0
|
|
}
|
|
fieldValue.SetInt(intValue)
|
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
|
|
uintValue, err := strconv.ParseUint(fmt.Sprintf("%v", value), 10, 64)
|
|
if err != nil {
|
|
uintValue = 0
|
|
}
|
|
fieldValue.SetUint(uintValue)
|
|
case reflect.Float32, reflect.Float64:
|
|
floatValue, err := strconv.ParseFloat(fmt.Sprintf("%v", value), 64)
|
|
if err != nil {
|
|
floatValue = 0
|
|
}
|
|
fieldValue.SetFloat(floatValue)
|
|
default:
|
|
// 设置字段的值
|
|
fieldValue.Set(reflect.ValueOf(value).Convert(fieldValue.Type()))
|
|
}
|
|
}
|
|
}
|
|
|
|
// ConvertIdsSlice 将 []string 转换为 []any
|
|
func ConvertIdsSlice(ids []string) []any {
|
|
// 将 []string 转换为 []any
|
|
arr := make([]any, len(ids))
|
|
for i, v := range ids {
|
|
arr[i] = v
|
|
}
|
|
return arr
|
|
}
|
|
|
|
// 查询-参数值的占位符
|
|
func KeyPlaceholderByQuery(sum int) string {
|
|
placeholders := make([]string, sum)
|
|
for i := 0; i < sum; i++ {
|
|
placeholders[i] = "?"
|
|
}
|
|
return strings.Join(placeholders, ",")
|
|
}
|
|
|
|
// 插入-参数映射键值占位符 keys, placeholder, values
|
|
func KeyPlaceholderValueByInsert(params map[string]any) ([]string, string, []any) {
|
|
// 参数映射的键
|
|
keys := make([]string, len(params))
|
|
// 参数映射的值
|
|
values := make([]any, len(params))
|
|
sum := 0
|
|
for k, v := range params {
|
|
keys[sum] = k
|
|
values[sum] = v
|
|
sum++
|
|
}
|
|
// 参数值的占位符
|
|
placeholders := make([]string, sum)
|
|
for i := 0; i < sum; i++ {
|
|
placeholders[i] = "?"
|
|
}
|
|
return keys, strings.Join(placeholders, ","), values
|
|
}
|
|
|
|
// 更新-参数映射键值占位符 keys, values
|
|
func KeyValueByUpdate(params map[string]any) ([]string, []any) {
|
|
// 参数映射的键
|
|
keys := make([]string, len(params))
|
|
// 参数映射的值
|
|
values := make([]any, len(params))
|
|
sum := 0
|
|
for k, v := range params {
|
|
keys[sum] = k + "=?"
|
|
values[sum] = v
|
|
sum++
|
|
}
|
|
return keys, values
|
|
}
|