golang基础: 简单命令行字典 | 青训营笔记

132 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

首先是学习到了抓包的知识, 通过对浏览器中请求的抓包处理, 快速生成对应的json和结构体代码

image.png

通过复制而来的请求url地址, 生成对应的json字符串, 然后通过网站JSON转Golang Struct - 在线工具 - OKTools来自动生成结构体, 大大提高了生产效率

找到我们需要的结构体代码

SimpleMeans struct {
   WordName  string   `json:"word_name"`
   From      string   `json:"from"`
   WordMeans []string `json:"word_means"`
   Exchange  struct {
      WordThird []string `json:"word_third"`
      WordIng   []string `json:"word_ing"`
      WordDone  []string `json:"word_done"`
      WordPl    []string `json:"word_pl"`
      WordPast  []string `json:"word_past"`
   } `json:"exchange"`
   Tags struct {
      Core  []string `json:"core"`
      Other []string `json:"other"`
   } `json:"tags"`
   Symbols []struct {
      PhEn  string `json:"ph_en"`
      PhAm  string `json:"ph_am"`
      Parts []struct {
         Part  string   `json:"part"`
         Means []string `json:"means"`
      } `json:"parts"`
      PhOther string `json:"ph_other"`
   } `json:"symbols"`
} `json:"simple_means"`
Lang   string `json:"lang"`

这里就是对百度翻译抓包后得到的简单释义的结构体代码, 比纯手写简单高效, 并且不会出错

解析的核心代码如下

bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
   log.Fatal(err)
}
if resp.StatusCode != 200 {
   log.Fatal("bad StatusCode:", resp.StatusCode, "body", string(bodyText))
}
//fmt.Printf("%s\n", bodyText)
var autoGenerated AutoGenerated
err = json.Unmarshal(bodyText, &autoGenerated)
if err != nil {
   log.Fatal(err)
}
fmt.Println("go", "使用百度翻译:data:", autoGenerated.DictResult.SimpleMeans.WordMeans)

首先对结构体进行一个定义, 然后对结构体代码解析 得到我们想要的数据

这里一开始我遇到了一个问题就是, 将结构体生成后, 需要指定一个请求数据,但是权限无法拼接成一个完整的字符串请求 后面反复观看直播课该部分的内容, 发现需要对该请求也要构造一个结构体, 来发送相应的请求

核心代码如下

type DictRequest struct {
   TransType string `json:"trans_type"`
   Source    string `json:"source"`
   UserID    string `json:"user_id"`
}
client := &http.Client{}
request := DictRequest{TransType: "en2zh", Source: word}
buf, err := json.Marshal(request)
if err != nil {
   log.Fatal(err)
}
var data = bytes.NewReader(buf)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)