一尘不染

Go Rand包裹的难度

go

是否有任何Go函数在每次运行时都返回真实的伪随机数?我的意思是考虑以下代码,

package main

import (
    "fmt"
    "rand"
)

func main() {
    fmt.Println(rand.Int31n(100))
}

每次执行此代码时,都会得到相同的输出。有没有一种方法每次调用都会返回不同的随机结果?


阅读 204

收藏
2020-07-02

共1个答案

一尘不染

rand可用于生成伪随机数,这些伪随机数是基于特定的初始值(称为“种子”)生成的。

初始种子的一个流行选择是例如当前时间(以纳秒为单位),当您多次执行程序时,该值可能会有所不同。您可以使用如下所示的当前时间初始化随机数生成器:

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

(不要忘记为此导入时间包)

还有另一个称为crypto /
rand的
软件包,可用于生成更好的随机值(此生成器可能还会考虑用户的鼠标移动,处理器的当前热量以及许多其他因素)。但是,此程序包中的功能要慢几倍,除非您不编写密码短语生成器(或其他与安全性有关的东西),否则普通的rand程序包可能就可以了。

2020-07-02