golang:随机数的产生

今日记录:随机数的产生与随机

产生随机数的函数

1
2
3
4
// Intn returns, as an int, a non-negative pseudo-random number in [0,n)
// from the default Source.
// It panics if n <= 0.
func Intn(n int) int { return globalRand.Intn(n) }

这是官方文档的说明,这个函数根据返回一个输入进制随机数。

然而在我们的实际使用中,这个随机数产生的随机数变得固定了,也就是说不随机了。

做个测试:

1
2
3
4
5
6
func main() {
for i := 0; i < 10; i++ {
num := rand.Intn(10) //十进制随机数
fmt.Printf("num=%d\n", num)
}
}

结果如下:

image-20200429155503781

看起来似乎是随机了,然鹅你运行多次发现,打印的数据每次运行都是相同的,连顺序都一样。

这是因为程序编译后,运行的环境是固定的,所以随机数产生后不再变化。

加入随机种子

加入随机种子可以解决随机数不随机的问题

1
2
3
4
5
6
7
func main() {
rand.Seed(time.Now().UnixNano()) //加入随机种子
for i := 0; i < 10; i++ {
num := rand.Intn(10)
fmt.Printf("num=%d\n", num)
}
}

此时,随机数的产生就真的随机了,不再是固定的随机数。

关键代码

1
rand.Seed(time.Now().UnixNano())

评论


:D 一言句子获取中...