这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
1.修改第一个例子猜谜游戏里面的最终代码,使用fmt.Scanf来简化代码实现
第一个作业算是巩固go的基础语法,这里将reader相关代码替换成Scanf输入即可,需要注意Windows系统换行符包括”\r”,在此应该加上
var input int
_, err := fmt.Scanf("%d\r\n", &input)
2.修改第二个例子命令行词典里面的最终代码,增加另-种翻译引擎的支持
这里会用到两个好工具:
首先选择火山翻译作为第二个引擎,复制curl并使用curlconverter转换成go代码粘贴到本地。
然后新建一个VolcanoRequest结构体,字段和curl中的data保持一致,用一个request取代curl转换代码里面的data。
将浏览器里调用api的字符串拷贝到oktools.net/json2go,转换-嵌套生成结构体,将其复制到代码中,并且反序列化bodyText,最后根据生成的结构体的具体内容,输出response里面翻译结果即可
for _, word := range volcanoResponse.Words {
for _, poslist := range word.PosList {
for _, explanation := range poslist.Explanations {
fmt.Println(explanation.Text)
}
}
}
3.在上一步骤的基础上,修改代码实现并行请求两个翻译引擎来提高响应速度
使用WaitGroup实现。 WaitGroup主要包含三个方法:
Add(delta int)
Done()
Wait()
Add设置WaiGroup的计数值,Done将计数值-1,Wait会阻塞调用这个方法的goroutine,直到计数值为0 为了并行请求两个翻译引擎,需要将计数值设置为2,并且在两个调用翻译引擎的函数里面添加Done相关的语句,最后添加Wait,等待两个函数执行完毕之后计数值为0,结束程序。