/
helper.go
72 lines (63 loc) · 1.59 KB
/
helper.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package utils
import (
"crypto/md5"
"encoding/json"
"fmt"
"math/rand"
"net/url"
"strconv"
"strings"
"time"
"github.com/axgle/mahonia"
"github.com/tidwall/gjson"
)
func UnixMilli() int64 {
return time.Now().UnixNano() / 1e6
}
func GenerateRangeNum(min, max int64) int64 {
rand.Seed(time.Now().UnixNano())
randNum := rand.Int63n(max-min) + min
return randNum
}
func Hour2Unix(hour string) (time.Time, error) {
return time.ParseInLocation(DateTimeFormatStr, time.Now().Format(DateFormatStr)+" "+hour, time.Local)
}
func Md5(s string) string {
data := []byte(s)
has := md5.Sum(data)
return fmt.Sprintf("%x", has)
}
func Json2Map(j string) map[string]interface{} {
r := make(map[string]interface{})
_ = json.Unmarshal([]byte(j), &r)
return r
}
func RandFloats(min, max float64, n int) float64 {
rand.Seed(time.Now().UnixNano())
res := min + rand.Float64()*(max-min)
res, _ = strconv.ParseFloat(fmt.Sprintf("%."+strconv.Itoa(n)+"f", res), 64)
return res
}
func FormatJsonpResponse(b []byte, prefix string, isConvertStr bool) gjson.Result {
r := string(b)
if isConvertStr {
r = mahonia.NewDecoder("gbk").ConvertString(r)
}
r = strings.TrimSpace(r)
if prefix != "" {
//这里针对http连接 自动提取jsonp的callback
if strings.HasPrefix(prefix, "http") {
pURL, err := url.Parse(prefix)
if err == nil {
prefix = pURL.Query().Get("callback")
}
}
r = strings.TrimPrefix(r, prefix)
}
if strings.HasSuffix(r, ")") || strings.HasPrefix(r, "(") {
r = strings.TrimRight(r, ";")
r = strings.TrimLeft(r, `(`)
r = strings.TrimRight(r, ")")
}
return gjson.Parse(r)
}