|
|
|
package util
|
|
|
|
|
|
|
|
import (
|
|
|
|
"math/rand"
|
|
|
|
"path/filepath"
|
|
|
|
"regexp"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
rand.Seed(time.Now().UnixNano())
|
|
|
|
}
|
|
|
|
|
|
|
|
// RandStringRunes 返回随机字符串
|
|
|
|
func RandStringRunes(n int) string {
|
|
|
|
var letterRunes = []rune("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
|
|
|
|
|
|
|
b := make([]rune, n)
|
|
|
|
for i := range b {
|
|
|
|
b[i] = letterRunes[rand.Intn(len(letterRunes))]
|
|
|
|
}
|
|
|
|
return string(b)
|
|
|
|
}
|
|
|
|
|
|
|
|
// ContainsUint 返回list中是否包含
|
|
|
|
func ContainsUint(s []uint, e uint) bool {
|
|
|
|
for _, a := range s {
|
|
|
|
if a == e {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
// IsInExtensionList 返回文件的扩展名是否在给定的列表范围内
|
|
|
|
func IsInExtensionList(extList []string, fileName string) bool {
|
|
|
|
ext := strings.ToLower(filepath.Ext(fileName))
|
|
|
|
// 无扩展名时
|
|
|
|
if len(ext) == 0 {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
if ContainsString(extList, ext[1:]) {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
// ContainsString 返回list中是否包含
|
|
|
|
func ContainsString(s []string, e string) bool {
|
|
|
|
for _, a := range s {
|
|
|
|
if a == e {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
// Replace 根据替换表执行批量替换
|
|
|
|
func Replace(table map[string]string, s string) string {
|
|
|
|
for key, value := range table {
|
|
|
|
s = strings.Replace(s, key, value, -1)
|
|
|
|
}
|
|
|
|
return s
|
|
|
|
}
|
|
|
|
|
|
|
|
// BuildRegexp 构建用于SQL查询用的多条件正则
|
|
|
|
func BuildRegexp(search []string, prefix, suffix, condition string) string {
|
|
|
|
var res string
|
|
|
|
for key, value := range search {
|
|
|
|
res += prefix + regexp.QuoteMeta(value) + suffix
|
|
|
|
if key < len(search)-1 {
|
|
|
|
res += condition
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return res
|
|
|
|
}
|
|
|
|
|
|
|
|
// BuildConcat 根据数据库类型构建字符串连接表达式
|
|
|
|
func BuildConcat(str1, str2 string, DBType string) string {
|
|
|
|
switch DBType {
|
|
|
|
case "mysql":
|
|
|
|
return "CONCAT(" + str1 + "," + str2 + ")"
|
|
|
|
default:
|
|
|
|
return str1 + "||" + str2
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// SliceIntersect 求两个切片交集
|
|
|
|
func SliceIntersect(slice1, slice2 []string) []string {
|
|
|
|
m := make(map[string]int)
|
|
|
|
nn := make([]string, 0)
|
|
|
|
for _, v := range slice1 {
|
|
|
|
m[v]++
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, v := range slice2 {
|
|
|
|
times, _ := m[v]
|
|
|
|
if times == 1 {
|
|
|
|
nn = append(nn, v)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nn
|
|
|
|
}
|
|
|
|
|
|
|
|
// SliceDifference 求两个切片差集
|
|
|
|
func SliceDifference(slice1, slice2 []string) []string {
|
|
|
|
m := make(map[string]int)
|
|
|
|
nn := make([]string, 0)
|
|
|
|
inter := SliceIntersect(slice1, slice2)
|
|
|
|
for _, v := range inter {
|
|
|
|
m[v]++
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, value := range slice1 {
|
|
|
|
times, _ := m[value]
|
|
|
|
if times == 0 {
|
|
|
|
nn = append(nn, value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nn
|
|
|
|
}
|