Go随机数踩得坑

Posted by JC on February 18, 2020

CASE1:不设置随机数种子,得到的随机数序列是固定的

输入:

func main() {
    fmt.Println("My first lucky number is", rand.Intn(10))
    fmt.Println("My senond lucky number is", rand.Intn(10))
}

输出:

My first lucky number is 1
My senond lucky number is 7

在本环境中,不论编译运行多少次,都是这个输出。

为什么没有产生随机的效果呢?

此程序的运行环境是固定的,因此 rand.Intn 总是会返回相同的数字。 (要得到不同的数字,需为生成器提供不同的种子数)

CASE2:随机数种子谨慎设置在for循环中

输入:

for i := 0; i < 20;i++ {
    rand.Seed(time.Now().Unix())
	fmt.Println(rand.Intn(10))
}

又得到了完全一样的随机数…

打印了一下每次seed的时间戳居然是相同的,所以结论就是,相同的seed得到的随机数序列也是相同的。