mirror of https://github.com/cloudreve/Cloudreve
				
				
				
			
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
package util
 | 
						|
 | 
						|
import (
 | 
						|
	"math/rand"
 | 
						|
	"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
 | 
						|
}
 | 
						|
 | 
						|
// 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
 | 
						|
}
 |