/
tools.go
149 lines (122 loc) · 3.32 KB
/
tools.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package utils
import (
"bufio"
"bytes"
"crypto/md5"
"crypto/rand"
"encoding/base64"
"encoding/hex"
"encoding/json"
"io"
"io/ioutil"
"os"
"strings"
"github.com/cihub/seelog"
"github.com/tidwall/gjson"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
)
/*
ReadRequestBody2JSON func(reqBody io.ReadCloser) []byte
*/
func ReadRequestBody2JSON(reqBody io.ReadCloser) []byte {
body, err := ioutil.ReadAll(reqBody)
if err != nil {
seelog.Errorf("ioutil.ReadAll Error : %v", err)
return []byte{}
}
return body
}
/*
GetJSONResultFromRequestBody func(reqBody []byte, path string) gjson.Result
*/
func GetJSONResultFromRequestBody(reqBody []byte, path string) gjson.Result {
return gjson.Get(string(reqBody), path)
}
/*
ReadJSONData2Array func(reqBody []byte, path string) []gjson.Result
*/
func ReadJSONData2Array(reqBody []byte, path string) []gjson.Result {
j := gjson.Get(string(reqBody), path)
return j.Array()
}
/*
Convert2JSON 任意数据类型转JSON
*/
func Convert2JSON(data interface{}) []byte {
switch data.(type) {
case []byte:
retdata := data.([]byte)
return retdata
default:
// log.Println("Convert To JSON args not []byte")
retdata, err := json.Marshal(data)
if err != nil {
seelog.Errorf("json.Marshal Error : %v", err)
return []byte("")
}
return retdata
}
}
/*
读文件 并 设置偏移量和行数
*/
// ReadLines reads contents from file and splits them by new line.
// A convenience wrapper to ReadLinesOffsetN(filename, 0, -1).
func ReadLines(filename string) ([]string, error) {
return ReadLinesOffsetN(filename, 0, -1)
}
// ReadLinesOffsetN reads contents from file and splits them by new line.
// The offset tells at which line number to start.
// The count determines the number of lines to read (starting from offset):
// n >= 0: at most n lines
// n < 0: whole file
func ReadLinesOffsetN(filename string, offset uint, n int) ([]string, error) {
f, err := os.Open(filename)
if err != nil {
return []string{""}, err
}
defer f.Close()
var ret []string
r := bufio.NewReader(f)
for i := 0; i < n+int(offset) || n < 0; i++ {
line, err := r.ReadString('\n')
if err != nil {
break
}
if i < int(offset) {
continue
}
ret = append(ret, strings.Trim(line, "\n"))
}
return ret, nil
}
/*
生成随机UID GetUniqueID()
*/
// GetMd5String 生成32位MD5字符串
func GetMd5String(s string) string {
newmd5 := md5.New()
newmd5.Write([]byte(s))
return hex.EncodeToString(newmd5.Sum(nil))
}
// GetUniqueID 生成UID唯一标识
func GetUniqueID() string {
newbyte := make([]byte, 48)
_, err := io.ReadFull(rand.Reader, newbyte)
if err != nil {
// seelog.Errorf("io.ReadFull Error : %v", err)
return "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
return GetMd5String(base64.URLEncoding.EncodeToString(newbyte))
}
// DecodeGBK2UTF8 GBK转UTF8
func DecodeGBK2UTF8(in []byte) ([]byte, error) {
I := bytes.NewReader(in)
O := transform.NewReader(I, simplifiedchinese.GBK.NewDecoder())
d, e := ioutil.ReadAll(O)
if e != nil {
return nil, e
}
return d, nil
}