go 语言实战入门案例之猜数字

简介: go 语言实战入门案例之猜数字

文章和代码已经归档至【Github仓库:https://github.com/timerring/backend-tutorial 】或者公众号【AIShareLab】回复 go 也可获取。

猜数字

第一个例子里面,我们会使用 Golang 来构建一个猜数字游戏。

在这个游戏里面,程序首先会生成一个介于 1 到 100 之间的随机整数,然后提示玩家进行猜测。玩家每次输入一个数字,程序会告诉玩家这个猜测的值是高于还是低于那个秘密的随机数,并且让玩家再次猜测。如果猜对了,就告诉玩家胜利并且退出程序。

package main

import (
    "fmt"
    "math/rand"
)

func main() {
   
   
    maxNum := 100
    secretNumber := rand.Intn(maxNum)
    fmt.Println("The secret number is ", secretNumber)
}

通过尝试可以发现,每次生成的随机数都是一样的。

通过查看文档,可知随机数的生成会使用到一个随机种子。

否则每一次都会生成相同的随机数序列。一般用启动的时间戳来初始化随机数种子。这里使用 time.now.unix 来初始化随机种子。

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

然后实现用户输入输出,并理解析成数字。

每个程序执行的时候都会打开几个文件,stdin stdout stderr 等,stdin 文件可以用 os.Stdin 来得到。然后直接操作这个文件很不方便,我们会用 bufio.NewReader 把一个文件转换成一个 reader 变量。

reader 变量上有用来操作流的操作,可以用它的 ReadString 方法读取一行。如果失败会打印错误并能退出。ReadString 返回的结果包含结尾的换行符,把它去掉再转换成数字。如果转换失败,我们同样打印错误,退出。

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 {
   
   
        // `reader` 变量上有用来操作流的操作,可以用它的 `ReadString` 方法读取一行。
        input, err := reader.ReadString('\n')
        if err != nil {
   
   
            fmt.Println("An error occured while reading input. Please try again", err)
            continue
        }
        // `ReadString` 返回的结果包含结尾的换行符,把它去掉。
        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
        }
    }
}

参考:字节内部课 Go 语言原理与实践

目录
相关文章
|
15天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
14天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
100 67
|
7天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
Go
Go实战(一)-概述
Go实战(一)-概述
116 0
Go实战(一)-概述
|
15天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
26 7
|
15天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
92 71
|
17天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
88 62
|
19天前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
15天前
|
存储 Go
go语言中映射
go语言中映射
32 11
|
17天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
29 12