-
Notifications
You must be signed in to change notification settings - Fork 3
/
query.go
executable file
·69 lines (62 loc) · 1.37 KB
/
query.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
package urlKit
import (
"github.com/richelieu42/chimera/v2/src/core/strKit"
)
// ToQueryString
/*
@param m 会对值进行 编码 操作
@return 可能为""
e.g.
(nil) => ""
e.g.1
m := map[string]string{
"a": "test",
"b": "测试",
}
fmt.Println(urlKit.ToQueryString(m)) // a=test&b=%E6%B5%8B%E8%AF%95
*/
func ToQueryString(queryParams map[string]string) string {
var str string
for k, v := range queryParams {
// PS: k和v都有可能是""
if strKit.IsNotEmpty(str) {
str += "&"
}
if strKit.IsNotEmpty(v) {
str += k + "=" + EncodeURIComponent(v)
} else {
str += k
}
}
return str
}
// AttachQueryParamsToUrl
/*
@param url (1) 原则上,不能为"",应该以"http://"或"https://"开头
(2) 不能是Request.URL.RawQuery
*/
func AttachQueryParamsToUrl(url string, queryParams map[string]string) string {
queryStr := ToQueryString(queryParams)
if strKit.IsEmpty(queryStr) {
return url
}
i := strKit.Index(url, "?")
if i == -1 {
return url + "?" + queryStr
} else if i == len(url)-1 {
// 传参url最后一个字符为"?"
return url + queryStr
}
return url + "&" + queryStr
}
// AttachQueryParamsToRawQuery
/*
@param rawQuery 可能为""
*/
func AttachQueryParamsToRawQuery(rawQuery string, queryParams map[string]string) string {
tmp := ToQueryString(queryParams)
if strKit.IsEmpty(rawQuery) {
return tmp
}
return rawQuery + "&" + tmp
}