Go 语言上手-基础语言课后作业| 青训营笔记

120 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

1.修改第一个例子猜谜游戏里面的最终代码,使用fmt.Scanf来简化代码实现

第一个作业算是巩固go的基础语法,这里将reader相关代码替换成Scanf输入即可,需要注意Windows系统换行符包括”\r”,在此应该加上

var input int
_, err := fmt.Scanf("%d\r\n", &input)

2.修改第二个例子命令行词典里面的最终代码,增加另-种翻译引擎的支持

这里会用到两个好工具:

curlconverter.com/#go

oktools.net/json2go

首先选择火山翻译作为第二个引擎,复制curl并使用curlconverter转换成go代码粘贴到本地。

然后新建一个VolcanoRequest结构体,字段和curl中的data保持一致,用一个request取代curl转换代码里面的data。

将浏览器里调用api的字符串拷贝到oktools.net/json2go,转换-嵌套生成结构体,将其复制到代码中,并且反序列化bodyText,最后根据生成的结构体的具体内容,输出response里面翻译结果即可

QQ截图20220510184902.png

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,结束程序。

QQ截图20220510154651.png