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)
}
相关推荐
吴佳浩6 小时前
Python入门指南(六) - 搭建你的第一个YOLO检测API
人工智能·后端·python
长安第一美人7 小时前
C 语言可变参数(...)实战:从 logger_print 到通用日志函数
c语言·开发语言·嵌入式硬件·日志·工业应用开发
Larry_Yanan7 小时前
Qt多进程(一)进程间通信概括
开发语言·c++·qt·学习
踏浪无痕7 小时前
JobFlow已开源:面向业务中台的轻量级分布式调度引擎 — 支持动态分片与延时队列
后端·架构·开源
superman超哥7 小时前
仓颉语言中基本数据类型的深度剖析与工程实践
c语言·开发语言·python·算法·仓颉
Pitayafruit7 小时前
Spring AI 进阶之路05:集成 MCP 协议实现工具调用
spring boot·后端·llm
不爱吃糖的程序媛8 小时前
Ascend C开发工具包(asc-devkit)技术解读
c语言·开发语言
bu_shuo8 小时前
MATLAB奔溃记录
开发语言·matlab
ss2738 小时前
线程池:任务队列、工作线程与生命周期管理
java·后端
不像程序员的程序媛8 小时前
Spring的cacheEvict
java·后端·spring