rand|青训营笔记

318 阅读2分钟

seed

种子使用提供的种子值将默认源初始化为确定性状态。除以 2³¹-1 时具有相同余数的种子值将生成相同的伪随机序列。与 Rand.Seed 方法不同,Seed 可以安全地同时使用。 如果未调用 Seed,则生成器将在程序启动时随机设定种子。 在 Go 1.20 之前,生成器在程序启动时像 Seed(1) 一样播种。要强制旧行为,请在程序启动时调用 Seed(1)。或者,在对这个包中的函数进行任何调用之前,在环境中设置 GODEBUG=randautoseed=0。 已弃用:当依赖项更改从全局随机源消耗多少依赖项时,调用 Seed 然后期望来自全局随机源的特定结果序列(使用 Int 等函数)的程序可能会被破坏。为了避免这种中断,需要特定结果序列的程序应该使用 NewRand(NewSource(seed)) 来获取其他包无法访问的随机生成器。

v1\main.go

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

v2\main.go

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

以上两段代码所实现的效果相同。

这段代码实现了一个猜数字游戏。程序会生成一个0到100之间的随机整数作为秘密数字,然后要求用户输入猜测的数字,如果猜测的数字比秘密数字大或小,程序会提示用户继续猜测,直到猜测正确为止。

代码中使用了标准库中的bufio、fmt、math/rand、os、strconv和strings等包。其中,rand包用于生成随机数,time包用于设置随机数种子,bufio包用于从标准输入读取用户输入,strconv包用于将字符串转换为整数,strings包用于去除用户输入中的回车和换行符。

在程序中,使用了for循环来不断读取用户输入,并使用了if-else语句来判断用户输入是否正确并给出相应的提示。当用户猜测正确时,使用break语句跳出循环,结束程序的执行。

总之,这段代码实现了一个简单的猜数字游戏,可以作为学习Go语言基础语法和标准库的练手项目。