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)
}
相关推荐
LuminousCPP24 分钟前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
web3.088899934 分钟前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python
один but you1 小时前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
IT_陈寒1 小时前
Redis缓存击穿把我整不会了,原来还有这手操作
前端·人工智能·后端
kyriewen2 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
文心快码BaiduComate2 小时前
干货|Comate Harness Engineering工程实践指南
前端·后端·程序员
光辉GuangHui2 小时前
Agent Skill 也需要测试:如何搭建 Skill 评估框架
前端·后端·llm
MY_TEUCK2 小时前
【Java 后端 | Nacos 注册中心】微服务治理原理、选型与注册发现实战
java·开发语言·微服务
我是谁的程序员2 小时前
Mac 上生成 AppStoreInfo.plist 文件,App Store 上架
后端·ios
irving同学462382 小时前
Node 后端实战:JWT 认证与生产级错误处理
前端·后端