从猜数字游戏中学Go语言基础 | 青训营笔记

127 阅读1分钟

“这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

介绍

猜数字游戏就是系统随机生成一个数字,然后我们输入一个数字去猜,系统提示是否大于或小于,我们根据提示继续猜,直到猜到那个数字为止。

游戏效果图

image.png

开发流程

1.随机生成一个数

每一个Go文件需要有package关键字命名。

需要使用import关键字导入需要的库,如fmt,可用println方法进行换行输出。

Go语言的变量可以使用:=进行赋值。

func关键词来命名函数,主函数main。

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)
}

运行效果

image.png

2.输入一个数字

使用bufio、reader、strings、strconv库,可以监听键盘里的数字。

go语言的异常处理可以使用err变量,然后对异常进行判断。

fmt.Println("Please input your guess")

reader := bufio.NewReader(os.Stdin) //bufio库
input, err := reader.ReadString('\n')  //reader库
if err != nil {
	fmt.Println("An error occured while reading input. Please try again", err)
	return
}
input = strings.TrimSuffix(input, "\r\n") //strings库
guess, err := strconv.Atoi(input) //strconv库
if err != nil {
	fmt.Println("Invalid input. Please enter an integer value")
	return
}
fmt.Println("You guess is", guess)

运行效果

image.png

3.条件判断

Go语言不像Java、C语言那样有()和;等约束,直接使用{}来区分即可。

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!")
}

运行效果

image.png

4.循环语句

使用for关键字,break关键字可以结束循环。

for {
	input, err := reader.ReadString('\n')
	if err != nil {
		fmt.Println("An error occured while reading input. Please try again", err)
		continue
	}
	input = strings.TrimSuffix(input, "\r\n")

	guess, err := strconv.Atoi(input)
	if err != nil {
		fmt.Println("Invalid input. Please enter an integer value")
		continue
	}
	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
	}
}

完整代码

package main

import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"strconv"
	"strings"
	"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")
	reader := bufio.NewReader(os.Stdin)
	for {
		input, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("An error occured while reading input. Please try again", err)
			continue
		}
		input = strings.TrimSuffix(input, "\r\n")

		guess, err := strconv.Atoi(input)
		if err != nil {
			fmt.Println("Invalid input. Please enter an integer value")
			continue
		}
		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
		}
	}
}

思考

还可以如何输入数字?

参考资料

Go语言helloworld代码

示例代码