Go Rand套餐难度很大

Arp*_*sss 11 go

是否有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包可能没问题.

  • 普通兰特的另一个有用特性是你可以通过重复使用种子来重现你的结果. (2认同)