GO语言工程实践课后作业 | 青训营

87 阅读2分钟

这是我在字节跳动青训营后端进阶班的第四篇笔记,是GO语言工程实践课后作业的实现思路、代码以及路径记录。

1.猜谜游戏-简化代码

第一个作业,要求我们修改第一个例子猜谜游戏的最终代码,使用fmy.Scanf来简化代码实现。

源代码中读取、处理输入的流程比较复杂: image.png

  • 首先使用bufio.NewReader将输入转化为流的形式;
  • 再通过reader.ReadString读取流中数据;
  • 上一步操作会把最后的换行符一起读取到input里,所以还需要通过input = strings.Trim(input, "\r\n")把末尾的换行符删去;
  • 为了能够进行猜字数字的比较,还需要通过guess, err := strconv.Atoi(input)把字符串类型的input变量转换为整数类型。

根据作业要求,我们尝试采用fmt.scanf函数直接读取数字:fmt.Scanf("%d\n", &guess);优化后的代码如下: image.png

2.命令行词典

这个示例有两部分作业,首先我们要为当前的词典增加另一种翻译引擎的支持,然后再在此基础上实现并行请求两个翻译引擎来提高响应速度。

增加翻译引擎

实现思路:参照课程中调用彩云翻译接口的实现方法,实现调用搜狗翻译接口的方法,还可以增加一个供用户选择翻译引擎的参数。

实现并行请求

实现思路:使用了两个 Goroutine 分别调用两个翻译接口的调用方法,并行地请求两个翻译引擎的接口,在每个 Goroutine 中用 defer wg.Done() 标记 Goroutine 的结束,并设置sync.WaitGroup数为1,只要其中一个翻译引擎查询到结果就继续执行后续操作。