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

112 阅读1分钟

第一次课程作业(作业2&作业3)

作业内容

  1. 修改第一个例子猜谜游戏里面的最终代码,使用fmt.Scanf来简化代码实现
  2. 修改第二个例子命令行词典里面的最终代码,增加另一种翻译引擎的支持
  3. 在上一步骤的基础上,修改代码实现并行请求两个翻译引擎来提高响应速度

作业2

在线词典

用户可以在命令行里面查询一个单词。通过调用第三方的API查询到单词的翻译并打印出来。

作业内容

修改在线词典里面的最终代码,增加另一种翻译引擎的支持

个人实践

根据课程中实现调用彩云翻译接口的方法QueryByCaiYun,实现调用搜狗翻译接口的方法QueryBySouGou,同时增加一个参数,以供用户选择翻译引擎,默认为彩云翻译。

func main() {
	if len(os.Args) != 3 {
		fmt.Fprintf(os.Stderr)
		os.Exit(1)
	}
	engin := os.Args[1]
	word := os.Args[2]
	if engin == "sougou" {
		QueryBySouGou(word)
	} else {
		QueryByCaiYun(word)
	}
}

最终效果 image.png

作业3

作业内容

在作业2的基础上,修改代码实现并行请求两个翻译引擎来提高响应速度

个人实践

使用了两个 Goroutine 分别调用QueryByCaiYunQueryBySouGou,并行地请求两个翻译引擎的接口,在每个 Goroutine 中,使用 defer wg.Done() 标记 Goroutine 的结束,设置sync.WaitGroup数为1,当某个翻译引擎查询到结果后即可继续执行后续操作。

func main() {
	if len(os.Args) != 2 {
		fmt.Fprintf(os.Stderr, `usage: simpleDict WORD
example: simpleDict hello
		`)
		os.Exit(1)
	}
	word := os.Args[1]

	var wg sync.WaitGroup
	wg.Add(1)
	go func() {
		defer wg.Done()
		result := QueryBySouGou(word)
		fmt.Println("以下为搜狗翻译结果:\n", result)
	}()
	go func() {
		defer wg.Done()
		result := QueryByCaiYun(word)
		fmt.Println("以下为彩云翻译结果:\n", result)
	}()
	wg.Wait()
}

最终效果

image.png