这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
demo1. 猜拳游戏
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)
// var reader string
// fmt.Scanf("%s", &reader) for {
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
continue
}
input = strings.Trim(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
}
}
}
1. 随机数
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
-
初始化随机数
time.Now().UnixNano() // 获取当前的时间戳 rand.Seed(time.Now().UnixNano()) // 初始化随机数或由于 Go 的
rand产生的是伪随机数,所以如果不初始化随机数,将会导致每次重新启动程序时产生相同的随机数。 -
产生随机数
rand.Intn(maxNum) // 产生随机数,并作为返回值返回
2. bufio流
- 产生bufio流
bufio.NewReader(rd io.Reader) // 以 rd 产生一个新的 Reader,并且 buffer 拥有默认的大小 os.Stdin // Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin"), 以系统的输入流产生一个新文件 - 从流中读入数据
input, err := reader.ReadString('\n') // 读入数据,直到遇到 '\n' func (b *Reader) ReadString(delim byte) (string, error) { } // ReadString读取直到输入中第一次出现delim
3. strings.Trim
- 去除字符串末尾的
\r\n值得注意的是:strings.Trim(input, "\r\n") // Trim返回字符串的一个片段,其中删除了剪切集中包含的所有前导和尾随Unicode代码点。- Windows回车键输入的是
\r\n - Linux回车键输入的是
\n - macOS回车键输入的是
\r
- Windows回车键输入的是
4. strconv.Atoi
- 将 string 转为 int
for _, ch := range []byte(s) { // 主要实现代码 ch -= '0' if ch > 9 { return 0, &NumError{fnAtoi, s0, ErrSyntax} } n = n*10 + int(ch) }