Goland实践案例——彩云字典 | 青训营

518 阅读4分钟

前言

彩云字典案例是一个非常简单的一个实践案例,但通过案例让我有许多思考和感悟,想在次记录一下,同时也希望给各位老哥一些学习上的帮助。话不多说,咱们开讲。

认真听课.webp

停一下,先思考两分钟

点进彩云小译,当我们输入需要翻译的词时,只需要点击翻译,英文单词在空白框里就有显示。斯...是谁在帮我们查字典。懂一些web知识的友友们这个问题肯定难不倒,那必是人家在后端有服务器提供服务啊,不然谁会给你查字典。那好,就像现实生活中你去餐厅点餐,你向服务员点餐,服务员会将你的点的菜记录在人家的纸条上(有些餐厅并不会这样但不在本文讨论范围内),然后将字条交给后厨。转换彩云字典的服务的话,浏览器相当于是服务员,那张纸条就是HTTP报文,厨师就是我们的后端接口,回来的菜是我们想要的数据。

话已至此,我们需要解决的问题已经出现——我要当服务员。我要自己通过努力,骗过厨师,让他给我做出我想要的。各位看官,让我们优雅的吃白食

请求

不管大家知不知道,我都要在这里科普一下:我们用浏览器发送请求的时候,浏览器会帮我们发送一个HTTP报文,这里面许多元数据和重要信息,这些东西必不可少,咱们的东西能不能完整走过网络这条线还的靠它们。

相信到这大家也就清楚了,我们前阶段的任务也就是:用Go语言填充一个有效的HTTP报文,然后把他发给我们的后端接口。可是问题来了,我又没接触过网络知识,也不了解HTTP报文是个什么东西,难道我为了写一个什么字典还要去学一堆晦涩难懂的网络知识。可能老实人还真的去做了,但我是谁——打饭都要让室友带的大学生。让我想起一位故人讲过一句话:上班是不可能上班的。其实别人都已经为我们准备好了工具,只是我们从没有在意过普通的他们......

好了现在不是emo的时候,全体目光向我看齐: 进入彩云小译 > 按下F12 > 在工具栏找到network(网络) > 找到 dict 这条记录 > 右键选择复制cURL

案例1.png 进入Convert curl commands to code > 选择go语言 > 粘贴 > 复制转换后的go代码

案例2.png

还没完,这里需要注意,以上方式为我们提供将我们要翻译的单词填充在请求中的没有给我们留有传入单词的参数

案例3.png

建议使用以下方式:

//请求数据
type DictRuquest struct {
   TransType string `json:"trans_type"`
   Source    string `json:"source"`
}

//var data = strings.NewReader(`{"trans_type":"en2zh","source":"good"}`)
request := DictRuquest{TransType: "en2zh", Source: "good"}
buff, err := json.Marshal(request)
data := bytes.NewReader(buff)

注:其中"ans_type":"en2zh"表示将英语翻译为汉语,"source":"good"表示需要翻译的单词。 这种方式将请求的数据封装在结构体中,并转化为JSON数据,最后字节流的形式插传入请求。

响应

同样的方法

进入彩云小译 > 按下F12 > 在工具栏找到network(网络) > 找到 dict 这条记录 > 点击找到body > 复制全部内容

案例4.png 打开json2go> 粘贴> 选择转化嵌套 最后更改结构体名称即可。

案例5.png

处理

返回来的数据非常多,我们需要从中找出我们需要的数据,此前我们需要了解一些我们返回数据的格式,这里可以在preview中先查看。

案例6.png

根据以上给出的信息,我们可以打印出读音以及它的意思:

fmt.Println("good", "UK:", dictrespons.Dictionary.Prons.En, "US:", dictrespons.Dictionary.Prons.EnUs)
for _, item := range dictrespons.Dictionary.Explanations {
   fmt.Println(item)
}

结言

是不是有些心动?这个案例非常简单,但它给我一种偷了别人东西的感觉。还有一点就是,感觉使用浏览器的开发工具更溜了。

得意.webp

希望对大家有所帮助,好了铁子们下期见886。