GO语言工程实践课后作业(二)
二、在线词典
这次是要实现一个在线的词典翻译,我们需要一个第三方的API,彩云科技提供的在线翻译。
2.1抓包
我们先打开彩云翻译的网页,右键点击“检查”,再选择“网络”,点击“dict”,可以看到“负载”下请求是200。我们右击“dict”,选择“复制”,选择“copy as cURL”。
但是我发现,这个copy as cURL跟课程上的不太一样。它COPY有两个选项。我们选择cURL(bash)才能在后续代码生成部分那里正确转换。
2.2代码生成
我们需要在golang里发送这个请求,如果用代码构造十分麻烦,所以用了“copy as cURL”,成功返回一大串json。然后我们打开一个这个网址Convert curl to Go (curlconverter.com),将之前的cURL返回的json,粘贴上去,再点击Go,会自动生成Go代码,我们并放到编译器中。
2.3生成request body
现在已经做好输入,但是输入目前是json格式,我们正常输入是变量,所以需要将输入转化成json格式。代码段如下:
type DictRequest struct{
TransType string `json:"trans_type"`
Source string `json:"source"`
UserID string `json:user_id`
}
func main() {
client := &http.Client{}
var data = strings.NewReader(`{"trans_type":"en2zh","source":"day"}`)
request :=DictRequest{TransType:"en2zh",Source:"good"}
buf,err :=json.Marshal(request)
if err !=nil{
log.Fatal(err)
}
2.4解析request body
接下来要将request body 解析出来。在Golang中是个强类型语言,所以最好是写一个结构体,把返回的json反序列化到结构体中,但要一一定义结构体,会十分复杂并且繁琐。我们这里用一个代码生成工具,json生成go。代码生成工具网址链接,JSON转Golang Struct - 在线工具 - OKTools
再点击“转换-嵌套”,使生成的代码更紧凑。结构如下图:
我们再得到结构体后,用json.unmarshal,再把body反序列化到结构体中,我们再选择需要的字段即可。
2.5打印结果
之后我们再修改main函数作为一个调用第三方获取单词翻译,最后写一个主函数main(),将单词传入到query(),并打印结果。打印结果如下图:
2.6总结
哇,不得不说,在基于自身实际的理解力上,花了三四天才能消化,或者说大概明白。可能是本人太笨,不得不说,再实现之后还是觉得有所收获。当然,之前对于结构体的使用,不太了解,以及代码最后for_,item这块也还是不理解,怎么就循环得到了?这块我再理解理解,以上是本人在实现课程所给代码的具体步骤,以及可能会遇到的一些问题。我再接再厉