这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
在初步认识了解Go语言后,我们就要动手开始实践啦!从青训营课程中“在线词典”的实践示例中我学到了很多,我将我在该实例中学习到的知识都总结到了这篇笔记中。
- 实现思路
通过调用第三方的API,查询到用户所需单词的翻译。为了实现对第三方API的调用,我们需要发送HTTP请求,请求中需要生成request body。再将得到的bodyText反序列化放入我们根据网页的json字符串构建的结构体。最后在结构体中找到我们需要的数据,按照我们所需的结构输出即可。
- 代码生成
在实现过程中用到了两次代码生成:
注意:代码生成得到的HTTP请求只是所复制的那一次请求,还需要对生成的代码进行分析,修改成为我们所需要的request body。
- 发送HTTP请求
请求中包括:创建请求,设置请求头,发起请求,读取响应。根据请求中的格式,我们建立结构体,使得我们能通过json.Marshal()实现序列化得到json字符串,也便于实现用户的输入,所编写的结构体如下所示:
type DictRequest struct { TransType string `json:"trans_type"` Source string `json:"source"` UserID string `json:"user_id"`}
- 解析json
对于得到的响应,我们需要根据响应的格式建立response结构体,才能将通过json.Unmarshal()反序列化的内容放入到结构体中,便于我们提取我们所需要的信息,通过代码生成的结构体如下所示:
type DictResponse struct { Rc int `json:"rc"` Wiki struct { KnownInLaguages int `json:"known_in_laguages"` Description struct { Source string `json:"source"` Target interface{} `json:"target"` } `json:"description"` ID string `json:"id"` Item struct { Source string `json:"source"` Target string `json:"target"` } `json:"item"` ImageURL string `json:"image_url"` IsSubject string `json:"is_subject"` Sitelink string `json:"sitelink"` } `json:"wiki"` Dictionary struct { Prons struct { EnUs string `json:"en-us"` En string `json:"en"` } `json:"prons"` Explanations []string `json:"explanations"` Synonym []string `json:"synonym"` Antonym []string `json:"antonym"` WqxExample [][]string `json:"wqx_example"` Entry string `json:"entry"` Type string `json:"type"` Related []interface{} `json:"related"` Source string `json:"source"` } `json:"dictionary"`}
注意:在复制json字符串时要注意格式,不是通过鼠标拖动选中全文,只需要直接右键所需json字符串的开头,选择“复制值”即可得到完整的json字符串。
- 完善代码
进入收尾工作,为程序添加输入,并判断输入的命令和参数个数正确后执行查询。由此,一个简易的在线词典就完成啦。