golang基础 在线词典 | 青训营笔记

98 阅读2分钟

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

《golong基础篇:在线词典》

一、从翻译器中获取Json数据

进入‘彩云翻译’中获取json数据,流程图如下:

QQ截图20220510210423.png

当复制好之后,进入终端,将内容拷贝进去,会出现一大串json数据

QQ图片20220510210757.png

进入curlconverter.com/ ,将终端当中复制的json数据拷贝入其中,并将语言选为Go

QQ截图20220510211046.png

将显示出来的go代码拷贝到编辑器当中

二、格式化json数据

当把代码拷贝至编辑器,运行后的结果为一长串json数据,很明显的看出这种格式不是我们所需要的,故而需要将其格式化

type DictRequest struct {
   TransType string `json:"trans_type"`
   Source    string `json:"source"`
   UserID    string `json:"user_id"`
}

创建一个结构体。trans_type为,source为需要转换的单词,user_id为用户的id

request := DictRequest{TransType: "en2zh", Source: "good"} //初始化结构体当中的参数
buf, err := json.Marshal(request) //序列化json字符串

初始化结构体当中的成员参数,并使用json.Marshal()来序列化json字符串

var data = bytes.NewReader(buf)

因为这是一个字节数组,所以需要使用bytes.NewReader()来构造序列化后的字符串(注:修改后需要将import中多余的包删掉)

三、解析response body

进入oktools.net/json2go ,运行前面写出的程序,将结果的json字符串拷贝进该网站,可以自动生成相应的结构体

QQ截图20220510214329.png

将得到的结构体拷贝到编辑器当中,并初始化该response结构体

var dictResponse DictResponse //初始化response结构体
err = json.Unmarshal(bodyText, &dictResponse) //反序列化body中的数据

使用json.Unmarshal()来反序列化body当中的json数据

四、获取结果并完善

从json中获取Dictionary.Explanations中的数据,使用for range循环来获取

if resp.StatusCode != 200 {
   log.Fatal("bad StatusCode:", resp.StatusCode, "body", string(bodyText))
}
fmt.Println(word, "UK:", dictResponse.Dictionary.Prons.En, "US:", dictResponse.Dictionary.Prons.EnUs)
for _, item := range dictResponse.Dictionary.Explanations {
   fmt.Println(item)
}

此时虽然能够获取结果,但其翻译的值是固定写死的,此时需要将其优化

func main() {
   if len(os.Args) != 2 {
      fmt.Fprintf(os.Stderr, `usage: simpleDict WORD
example: simpleDict hello
      `)
      os.Exit(1)
   }
   word := os.Args[1]
   query(word)
}

该主函数是重新写的一个,之前的主函数修改为query(word),并将其设定一个String型的参数,用来表示需要翻译的数据。

QQ图片20220511121843.png

展示效果如上,输入一个词,便能够翻译出对应的结果。但是有一处地方值得注意:在GOPATH中,需要有当前工程对应的目录及内容,并且需要在终端运行,才能在工程运行之初能够有参数,运行指令也需要多留心。

QQ截图20220511122413.png