Go小工具合集

一、处理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)
}
相关推荐
瑞士卷@3 小时前
MyBatis入门到精通(Mybatis学习笔记)
java·数据库·后端·mybatis
梵得儿SHI3 小时前
Java 反射机制深度剖析:性能与安全性的那些坑
java·开发语言·安全·反射·动态代理·性能·反射机制
fsnine3 小时前
Python图形化界面——pyqt5教程
开发语言·python·qt
嵌入式-老费4 小时前
Easyx图形库应用(和lua结合使用)
开发语言·lua
AsiaLYF4 小时前
kotlin中MutableStateFlow和MutableSharedFlow的区别是什么?
android·开发语言·kotlin
yuuki2332334 小时前
【C语言】文件操作(附源码与图片)
c语言·后端
IT_陈寒4 小时前
Python+AI实战:用LangChain构建智能问答系统的5个核心技巧
前端·人工智能·后端
Asuncion0074 小时前
Docker核心揭秘:轻量级虚拟化的革命
服务器·开发语言·docker·云原生
无名之辈J4 小时前
系统崩溃(OOM)
后端