一、处理json字符串数据
go
复制代码
package main
import (
"fmt"
"github.com/tidwall/gjson"
)
const json = `{
"username": "tanglei",
"pwd": "111111",
"info": {
"age": "18",
"sex": "男",
"love": [
{
"python": "selenium1",
"java": "jmeter"
},
{
"vue": "element",
"react": {
"test1": "123",
"test2": {
"name": "${name}"
}
}
}
]
}
}
`
func main() {
value := gjson.Get(json, "info.love.1.react.test2.name")
fmt.Println(value.String())
}
二、读取json文件
go
复制代码
package main
import (
"fmt"
"io/ioutil"
"os"
)
func readJSONFile(path string) string {
// 打开json文件 path:json文件路径
jsonFile, err := os.Open(path)
// 最好要处理以下错误
if err != nil {
fmt.Println(err)
}
// 要记得关闭
defer jsonFile.Close()
byteValue, _ := ioutil.ReadAll(jsonFile)
return string(byteValue)
}
func main() {
jsonData := readJSONFile("user.json")
fmt.Println(jsonData)
}
三、将json格式数据处理成map
go
复制代码
func jsonToMap(data string) (result map[string]interface{}){
err := json.Unmarshal([]byte(data), &result)
if err != nil {
fmt.Println("JsonToMapDemo err: ", err)
}
return
}
四、随机从数组里取值
go
复制代码
package main
import (
"fmt"
"math/rand"
"time"
)
func randomAccessData(data []string) string {
/*
rand.Seed:还函数是用来创建随机数的种子,如果不执行该步骤创建的随机数是一样的,因为默认Go会使用一个固定常量值来作为随机种子。
time.Now().UnixNano():当前操作系统时间的毫秒值
*/
rand.Seed(time.Now().UnixNano())
/*生成一个随机数*/
a := rand.Intn(len(data))
return data[a]
}
func main() {
res2 := []string{"1", "2", "3", "4", "5", "6"}
res3 := randomAccessData(res2)
fmt.Println(res3)
}
五、正则匹配
go
复制代码
package main
import (
"fmt"
"regexp"
)
func matchRegular(data string, rule string) (res []string) {
// data: 需要匹配的字符串 rule: 匹配的规则 res: 返回数组
//1)解释规则,他会解析正则表达式,如果成功返回解释器
reg1 := regexp.MustCompile(rule)
if reg1 == nil { //解释失败,返回nil
fmt.Println("err = ")
return
}
//2)根据规则提取关键信息,-1表示匹配所有项,正数为匹配项数
result := reg1.FindAllStringSubmatch(data, -1)
for _, value := range result {
res = append(res, value[1])
}
return res
}
func main() {
jsonData := `{"username": "root","pwd": "123456","info": {"age": "18","sex": "男","love": [{"python": "selenium1","java": "jmeter"}]}}`
res0 := matchRegular(jsonData, `"pwd": "(.+?)"`)
fmt.Println(res0)
}
六、生成随机IP地址
go
复制代码
package main
import (
"fmt"
"math/rand"
"time"
)
func randIP() string {
/*
rand.Seed:还函数是用来创建随机数的种子,如果不执行该步骤创建的随机数是一样的,因为默认Go会使用一个固定常量值来作为随机种子。
time.Now().UnixNano():当前操作系统时间的毫秒值
*/
rand.Seed(time.Now().UnixNano())
/*生成一个随机数*/
a := rand.Intn(256)
b := rand.Intn(256)
c := rand.Intn(256)
d := rand.Intn(256) //实际随机生成的数字范围[0,255]
ip := fmt.Sprintf("%d.%d.%d.%d", a, b, c, d)
return ip
}
func main() {
ip := randIP()
fmt.Println(ip)
}
七、go http客户端(使用三方库构造)
go
复制代码
package main
import (
"fmt"
"github.com/kirinlabs/HttpRequest"
"strings"
)
func handleRes(resp *HttpRequest.Response,err error) (result string,error error) {
defer resp.Close()
if err != nil {
error = err
return "", err
}
body, _ := resp.Body()
result = string(body)
return
}
// 处理请求方式为get,并且参数是body的情况
func requestsGetBody(url string, headers map[string]string, data map[string]interface{}) (result string, error error) {
//JSON序列化
configData, _ := json.Marshal(&data)
param := bytes.NewReader(configData)
fmt.Println("data:", data)
//构建http请求
client := &http.Client{}
req, err1 := http.NewRequest("GET", url, param)
if err1 != nil {
error = err1
return "", err1
}
//header
for key, value := range headers {
req.Header.Add(key, value)
}
//发送请求
res, err2 := client.Do(req)
if err2 != nil {
error = err2
return "", err2
}
defer res.Body.Close()
//返回结果
body, err3 := ioutil.ReadAll(res.Body)
if err3 != nil {
error = err3
return "", err3
}
result = string(body)
return
}
// 发送请求
func sendRequests(method string, url string, headers map[string]string, cookies map[string]string, data map[string]interface{}) (result string, error error) {
req := HttpRequest.NewRequest().Debug(false).SetTimeout(5)
req.SetHeaders(headers)
req.SetCookies(cookies)
if strings.Contains(strings.ToUpper(method), "GET") {
headerValue, _ := json.Marshal(headers)
headerString := string(headerValue)
if strings.Contains(headerString, "json") {
result, error = requestsGetBody(url, headers, data)
} else {
resp, err := req.Get(url, data)
result, error = handleRes(resp, err)
}
} else if strings.Contains(strings.ToUpper(method), "POST") {
resp, err := req.Post(url, data)
result, error = handleRes(resp, err)
}
return
}
func main() {
head := map[string]string{"Authorization": "JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiN2MzZGY4NjUtMGJjYS00MDRjLThmMzAtODVlNjNiOThlNmNlIiwidXNlcm5hbWUiOiJhZG1pbiIsImV4cCI6MTYzNzU5MzQ5NywiZW1haWwiOiJhZG1pbkBxcS5jb20ifQ.1BOeh4HABB2J-Vfr_uG9tAeobURIjFVXlGpQjtLqeZI"}
cookie := map[string]string{}
data := map[string]interface{}{}
resp , err := sendRequests("get", "http://127.0.0.1:10000/interface", head, cookie, data)
fmt.Println("resp:",resp)
fmt.Println("err:",err)
}