我是新手rand.Intn(n int) int,不知道为什么它rand.Intn(n int) int为每次运行打印相同的数字:
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println(rand.Intn(10))
}
Run Code Online (Sandbox Code Playgroud)
文档说:
Intn从默认Source返回[0,n]中的非负伪随机数作为int.如果n <= 0则会发生恐慌.
我如何正确播种随机数生成?
通过调用该rand.Seed()函数,传递一个(随机)种子(通常是当前的unix时间戳).从math/rand包doc 引用:
顶级函数(如Float64和Int)使用默认的共享源,每次运行程序时都会生成确定的值序列.如果每次运行需要不同的行为,请使用Seed函数初始化默认Source.
例:
rand.Seed(time.Now().UnixNano())
Run Code Online (Sandbox Code Playgroud)
如果rand.Seed()未调用,则生成器的行为就像是由1播种的:
Seed使用提供的种子值将默认Source初始化为确定性状态.如果未调用Seed,则生成器的行为就像Seed(1)播种一样.