第一次课程作业(作业2&作业3)
作业内容
- 修改第一个例子猜谜游戏里面的最终代码,使用
fmt.Scanf来简化代码实现 - 修改第二个例子命令行词典里面的最终代码,增加另一种翻译引擎的支持
- 在上一步骤的基础上,修改代码实现并行请求两个翻译引擎来提高响应速度
作业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)
}
}
最终效果
作业3
作业内容
在作业2的基础上,修改代码实现并行请求两个翻译引擎来提高响应速度
个人实践
使用了两个 Goroutine 分别调用QueryByCaiYun和QueryBySouGou,并行地请求两个翻译引擎的接口,在每个 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()
}
最终效果