这是我参与[第五届青训营]伴学笔记创作活动的第五天
前言
距离这一次实现词典功能虽然过了很久,但是还是有必要记录一下这一个小小的demo,这不仅是对旧知识的一种巩固,也是接触go语言所做的第一个小demo的里程碑的记录
一.本堂课重要内容
- Go语言实现词典功能
二.具体实现
需求:输入一个英文单词,将它的音标以及翻译打印到控制台
- 首先打开彩云翻译
输入你想要翻译的单词,接着便会出现单词的翻译与音标
彩云翻译的网址 fanyi.caiyunapp.com/#/
- 打开控制台
右击鼠标,点检查,打开控制台,再点击Network,点dict,便可以在Headers中看到此次请求是POST请求
点击Payload,便可以看到请求体和请求体中的参数
- 代码自动生成
我们需要在Golang中发送这个请求,因为请求比较复杂,我们可以利用一种简单的方式自动生成请求代码, 我们可以右键浏览器里面的Copy as cURL(bash),得到一大串json
进入到网站curlconverter.com/go/ ,将复制得到的json进行粘贴,便可以自动生成请求代码
将生成的代码运行,能够看到可以成功发送请求,返回一大串json字符串并打印出来
- 创建requestbody
此时代码中的请求是写死的,不利于我们使用,我们可以用一个变量来进行输入,要用到json序列化。在Go中,我们要生成一段json,常用的方法是构建一个结构体,结构体的参数与我们要生成json结构一一对应
用json.Marshald得到序列化以后的字符串,再以字节数组的方式写入data,后发送请求,结果与开始运行的代码一样
- 解析和创建responsebody
接下来我们要把responsebody解析出来,对于GO这样强类型的语言,最常用的方法是与request一样,创建一个结构体,将返回的json反序列化到结构体中
可以看到,返回的json十分复杂,一一定义结构体参数不仅繁琐,而且容易出错,我们依旧可以使用网上的代码生成小工具 oktools.net/json2go 来生成responsebody
这样我们就得到了一个response结构体,接下来我们修改代码,先定义一个结构体responsebody,再用json.Unmarsh把body反序列化到结构体中
- 选择输出并优化代码
当运行代码后可以看到打印了一大串可以看懂的字符串,从中选出特定字段并打印出来即可
修改代码,选出特定字段
此时便可以得到想要的字段,但输入的单词依旧是写死的,我们可以将其封装成一个query函数,重新写一个main函数来输入想翻译的单词,并调用函数翻译,main函数中对输入的参数进行判断,如果不是两个参数,则直接打印错误信息并退出程序
- 最终效果展示
三.个人体会与总结
这个demo不仅可以让我学习到如何高效和正确的使用go语言发送Http请求和处理返回的json,还能学习如何优化自己的代码,使自己的代码更实用,这是本人学习go语言的一个里程碑的记录