一、猜谜游戏
首先设置一个随机种子,并利用随机种子生成随机数,如果这里不用随机种子的话,会导致每次生成的随机数都是一样的。然后用reader := bufio.NewReader(os.Stdin)来创建了一个新的读取器(Reader),这个读取器会与标准输入流(os.Stdin)关联。通过这个读取器,我们可以以更高级别的方式从标准输入中读取数据。
然后使用for循环,input, err := reader.ReadString('\n') 用来读取输入数据,将输入数据与生成的随机数进行比较,如果较小/大就输出该数较小/大的提示,并重新输入,直到输入的数与生成的随机数一致为止,这样就完成了一个小小的猜谜游戏。
但是在这里会遇到一个问题,该输入函数是一个读取缓冲区的函数,它会将输入的数字加上最后一个换行符一起作为字符串读入,所以在这里需要对input进行一下处理,首先是要将换行符用strings.Trim(input, "\r\n") 函数去除掉,然后用strconv.Atoi(input)将字符串转换成数字类型。
作业:修改猜谜游戏里面的最终代码,使用 fmt.Scanf 来简化代码实现
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
// fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
var guess int
for {
fmt.Scan(&guess) //修改处
fmt.Println("You guess is", guess)
if guess > secretNumber {
fmt.Println("Your guess is bigger than the secret number. Please try again")
} else if guess < secretNumber {
fmt.Println("Your guess is smaller than the secret number. Please try again")
} else {
fmt.Println("Correct, you Legend!")
break
}
}
}
二、命令行词典
简介
实现一个命令行词典,在命令行输入一个英文单词时,返回英文单词的中文意思以及音标。具体实现是通过调用第三方的api对单词进行翻译并且打印出来。在这里将会学习如何用go语言发送http请求,解析json,以及如何提高开发效率。
实现内容已省略
作业:修改命令行词典里面的最终代码,增加另一种翻译引擎的支持
三、在二的基础上,实现并行请求两个翻译引擎来提高响应速度
在Go语言中,goroutines是一种非常高效的并发执行机制,它们允许你以最小的资源开销来并行执行多个任务。Goroutines是Go语言中的轻量级线程,由Go运行时管理,它们在执行时共享相同的内存空间,但是拥有自己的栈。这种设计使得goroutine在创建和运行上比传统的线程更加轻量和高效。
为了实现并行请求两个函数,你可以使用Go语言的go关键字来启动一个goroutine。此外,为了等待这两个并行执行的goroutine完成,你可以使用sync包中的WaitGroup