Go 语言入门指南:实战案例(1)| 青训营

75 阅读2分钟

在这一次文章中,我们要实现一个可以拥有无限次机会的猜数字游戏,在游戏中,程序会根据我们猜测的结果进行提示,如猜大了或者猜小了等等,实现的结果如下图所示:

image.png

在实现这一个游戏之前,我们需要先学习使用组成这个游戏的最基本的零部件。首先是如何生成一个随机的数字,在go青训的教程,最开始使用了以下的方法实现随机数字的方法:

	num := rand.Intn(100)
	reader := bufio.NewReader(os.Stdin)
	fmt.Println("随机数是:", num)

在教程中,老师说明此代码每次生成的随机数都是一样的,需要使用随机数种子的方法来实现这个问题,更改后的代码如下:

  rand.Seed(time.Now().UnixNano())
  num := rand.Intn(100)
	reader := bufio.NewReader(os.Stdin)
	fmt.Println("随机数是:", num)

但当我打开goland操作上述更改前的代码时却发现不会生成一样的数字,且显示rand.Seed()已被弃用,在此我猜测是我的版本与老师使用的版本不一致导致的结果。

第二个零件,就是从用户键盘输入用户想要猜测的数字并转换成对应的数据类型,代码如下所示

input, err := reader.ReadString('\n')  //读取一行
if err != nil {  
    fmt.Println("输入时发生错误")  
    continue  
}  
  
input = strings.TrimSuffix(input, "\r\n")  //去掉结尾换行符
guess, err := strconv.Atoi(input)  
if err != nil {  
        fmt.Println("输入无效数据")   
    continue  
}

上述代码与教程中的代码有一处不一致,那就是去掉结尾换行符的地方,老师去掉的是”\n“,而我是”\r\n“, 这是因为操作系统不同,老师的应该是Linux,而我的是windows。

知道以上内容,再加上一些简单的循环语句和条件判断语句就能实现我们想要的功能了,不过在此还有一个地方需要注意,那就是go中没有while循环。当我想要写出死循环时,我习惯性地写出了”while true“结果却发现报错了,这是才想起go中是用”for true“,真是笑死个人了。