Create & Init Project...
This commit is contained in:
123
app/interface/main/creative/dao/tool/tool.go
Normal file
123
app/interface/main/creative/dao/tool/tool.go
Normal file
@ -0,0 +1,123 @@
|
||||
package tool
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"net/url"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Sign fn
|
||||
func Sign(params url.Values) (query string, err error) {
|
||||
if len(params) == 0 {
|
||||
return
|
||||
}
|
||||
if params.Get("appkey") == "" {
|
||||
err = fmt.Errorf("utils http get must have parameter appkey")
|
||||
return
|
||||
}
|
||||
if params.Get("appsecret") == "" {
|
||||
err = fmt.Errorf("utils http get must have parameter appsecret")
|
||||
return
|
||||
}
|
||||
if params.Get("sign") != "" {
|
||||
err = fmt.Errorf("utils http get must have not parameter sign")
|
||||
return
|
||||
}
|
||||
// sign
|
||||
secret := params.Get("appsecret")
|
||||
params.Del("appsecret")
|
||||
tmp := params.Encode()
|
||||
if strings.IndexByte(tmp, '+') > -1 {
|
||||
tmp = strings.Replace(tmp, "+", "%20", -1)
|
||||
}
|
||||
mh := md5.Sum([]byte(tmp + secret))
|
||||
params.Set("sign", hex.EncodeToString(mh[:]))
|
||||
query = params.Encode()
|
||||
return
|
||||
}
|
||||
|
||||
//DeDuplicationSlice for del repeat element
|
||||
func DeDuplicationSlice(a []int64) (b []int64) {
|
||||
if len(a) == 0 {
|
||||
return
|
||||
}
|
||||
isHas := make(map[int64]bool)
|
||||
b = make([]int64, 0)
|
||||
for _, v := range a {
|
||||
if ok := isHas[v]; !ok {
|
||||
isHas[v] = true
|
||||
b = append(b, v)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//ContainAll all element of a contain in the b.
|
||||
func ContainAll(a []int64, b []int64) bool {
|
||||
isHas := make(map[int64]bool)
|
||||
for _, k := range b {
|
||||
isHas[k] = true
|
||||
}
|
||||
for _, v := range a {
|
||||
if !isHas[v] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
//ContainAtLeastOne fn
|
||||
func ContainAtLeastOne(a []int64, b []int64) bool {
|
||||
if len(a) == 0 {
|
||||
return true
|
||||
}
|
||||
isHas := make(map[int64]bool)
|
||||
for _, k := range b {
|
||||
isHas[k] = true
|
||||
}
|
||||
for _, v := range a {
|
||||
if isHas[v] {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
//ElementInSlice fn
|
||||
func ElementInSlice(a int64, b []int64) bool {
|
||||
if len(b) == 0 {
|
||||
return false
|
||||
}
|
||||
for _, v := range b {
|
||||
if a == v {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
//RandomSliceKeys for get random keys from slice by rand.
|
||||
func RandomSliceKeys(start int, end int, count int, seed int64) []int {
|
||||
if end < start || (end-start) < count {
|
||||
return nil
|
||||
}
|
||||
nums := make([]int, 0)
|
||||
r := rand.New(rand.NewSource(seed))
|
||||
for len(nums) < count {
|
||||
num := r.Intn((end - start)) + start
|
||||
exist := false
|
||||
for _, v := range nums {
|
||||
if v == num {
|
||||
exist = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !exist {
|
||||
nums = append(nums, num)
|
||||
}
|
||||
}
|
||||
return nums
|
||||
}
|
Reference in New Issue
Block a user