Files
PandaX/pkg/tool/base.go
2023-09-21 18:00:33 +08:00

86 lines
1.7 KiB
Go

package tool
import (
"reflect"
"regexp"
"strings"
)
func ToCamelCase(s string) string {
re := regexp.MustCompile(`[_\W]+`)
words := re.Split(s, -1)
for i := range words {
if i != 0 {
words[i] = strings.Title(words[i])
}
}
return strings.Join(words, "")
}
func RegexpKey(str string) []string {
// 定义正则表达式
re := regexp.MustCompile(`\${([^}]+)}`)
matches := re.FindAllStringSubmatch(str, -1)
// 提取匹配项的内容
var results []string
for _, match := range matches {
if len(match) >= 2 {
results = append(results, match[1])
}
}
return results
}
func RegexpGetSql(str string) string {
// 定义正则表达式
re := regexp.MustCompile(`\${([^}]+)}`)
return re.ReplaceAllString(str, "?")
}
func GetStructKeys(obj interface{}) []string {
val := reflect.ValueOf(obj)
typ := val.Type()
keys := make([]string, 0, typ.NumField())
for i := 0; i < typ.NumField(); i++ {
field := typ.Field(i)
keys = append(keys, field.Name)
}
return keys
}
func GetMapKeys(obj map[string]interface{}) []string {
keys := make([]string, 0, len(obj))
for key := range obj {
keys = append(keys, key)
}
return keys
}
func CheckInterfaceIsArray(data interface{}) (bool, []map[string]interface{}) {
if data == nil {
return false, nil
}
valueType := reflect.TypeOf(data)
// 判断类型是否为数组或切片
if valueType.Kind() == reflect.Slice || valueType.Kind() == reflect.Array {
var maps []map[string]interface{}
for _, item := range data.([]interface{}) {
if m, ok := item.(map[string]interface{}); ok {
maps = append(maps, m)
}
}
return true, maps
}
return false, nil
}
func GetInterfaceType(v interface{}) string {
interfaceType := reflect.TypeOf(v)
return interfaceType.String()
}