在线词典 | 青训营笔记

69 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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字符串。

  • 完善代码

进入收尾工作,为程序添加输入,并判断输入的命令和参数个数正确后执行查询。由此,一个简易的在线词典就完成啦。