是否有Go函数在每次运行中返回真正的伪随机数?我的意思是,考虑下面的代码,
package main
import (
"fmt"
"rand"
)
func main() {
fmt.Println(rand.Int31n(100))
}
Run Code Online (Sandbox Code Playgroud)
每次执行此代码时,我都会得到相同的输出.有没有一种方法可以在每次调用时返回不同的随机结果?
tux*_*21b 17
包rand可用于生成伪随机数,其基于特定初始值(称为"种子")生成.
这个初始种子的流行选择是例如以纳秒为单位的当前时间 - 当您多次执行程序时,该值可能会有所不同.您可以使用当前时间初始化随机生成器,如下所示:
rand.Seed(time.Now().UnixNano())
Run Code Online (Sandbox Code Playgroud)
(别忘了导入时间包)
还有另一个名为crypto/rand的软件包可以用来生成更好的随机值(这个生成器也可以考虑用户的鼠标移动,处理器的当前热量以及许多其他因素).但是,这个包中的函数要慢几倍,除非你没有写一个密码生成器(或其他安全相关的东西),普通的rand包可能没问题.
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |