GO基础课后作业实践 |青训营

160 阅读2分钟

前言

第一节关于Go语言基础的课程,老师给出的一个例子是设计一个小的命令行词典,出入中文词汇就可以把在线词典的结果打印出来。PPT中给的例子使用是彩云小译作为翻译引擎支持,课后作业是让我们增加对另外一种翻译引擎的支持, 我这里用了deepL。下面我就简单总结一下具体过程。

实践过程

和老师的步骤一样,首先我们要用浏览器抓包,了解request和response的结构。

Screenshot 2023-08-26 at 16.21.00.png

Screenshot 2023-08-26 at 16.22.31.png

这个request body的结构还是挺复杂的,有很多的参数,但是只能一个一个的编写。
下一步就是复制cURL并把它转化成Go语言,用这个转换工具curlconverter.com/go/ 并且把这个转化出来的代码复制到我们自己的文件里面,大概就是这样。

Screenshot 2023-08-26 at 16.27.45.png

下一步就是解析response body。
DeepL返回的response body差不多长这个样子:

Screenshot 2023-08-26 at 16.58.06.png 重点的部分translations这里,我们从translation中得到最终的中文翻译。 我们可以把整个response body复制下来,然后拿到oktools.net/json2go 这个网站,把json转化为golang struct。这样我们就可以直接使用它生成的代码,不必再用手敲,比较方便快捷也不容易出错。
生成的struct大概就长这个样子:

Screenshot 2023-08-26 at 17.01.51.png

然后我们再用json.Unmarshal把返回的response body解析到结构体中。
最终根据我们想要的部分写一个循环,就可以打印出我们想要的翻译结果。
大概就长这个样子:

Screenshot 2023-08-26 at 17.05.51.png

DeepL网页版的翻译长这个样子:

Screenshot 2023-08-26 at 17.06.17.png

一些Bug

不知道为什么如果用结构体序列化生成request body进行请求的的话就会返回一个429 Too Many Request。但是使用代码生成软件生成的代码就不会这样。这样就导致无法使用我们命令行输入的文字进行翻译,这是一个大bug,我还会继续看怎么解决这个Bug。
但是即使是使用代码生成软件生成的request body进行请求,有时候也会收到429代码,怀疑可能和timestamp和id有关。因为去抓包生成一个新的timestamp和id并且把原来的替换掉就又可以正常的使用了。