有没有Go语言的函数每次运行都返回真伪随机数?我的意思是,考虑下面的代码,
package main import ( "fmt" "rand" ) func main() { fmt.Println(rand.Int31n(100)) }
每次我执行这段代码,我得到相同的输出。是否有一个方法每次被调用时都会返回不同的、随机的结果?
exdqitrt1#
包rand可用于生成伪随机数,这些伪随机数基于特定的初始值(称为“种子”)生成。一个流行的初始种子选择是当前时间(纳秒)--当你多次执行程序时,这个值可能会不同。你可以用当前时间初始化随机数生成器,如下所示:
rand.Seed(time.Now().UnixNano())
(don'不要忘记为此导入time包)还有另一个名为crypto/rand的包,可用于生成更好的随机值(此生成器还可能考虑用户的鼠标移动、处理器的当前热量和许多其他因素)。但是,此包中的函数要慢几倍,除非您不编写密码短语生成器(或其他安全相关的东西),正常的兰德包可能没问题。
nnt7mjpx2#
您必须首先接种RNG。我从来没用过围棋,但可能是rand.Seed(x);
rand.Seed(x);
insrf1ej3#
rand.Seed(time.Now().UnixNano())在Ubuntu上工作。我花了很长时间研究rand.Seed(time.Nanoseconds())。我终于找到了这个例子:谷歌搜索2.1在戈兰旅游。
rand.Seed(time.Nanoseconds())
5ktev3wc4#
总结以上答案,你可以用rand.Seed(n)编写自己的随机数生成器。每次播种时n必须是不同的数字。下面是一个例子:
rand.Seed(n)
func RandomInt(n int) int { rand.Seed(time.Now().UnixNano()) return rand.Intn(n) } func RandomIntFromRange(min int, max int) int { rand.Seed(time.Now().UnixNano()) return rand.Intn(max - min + 1) + min }
4条答案
按热度按时间exdqitrt1#
包rand可用于生成伪随机数,这些伪随机数基于特定的初始值(称为“种子”)生成。
一个流行的初始种子选择是当前时间(纳秒)--当你多次执行程序时,这个值可能会不同。你可以用当前时间初始化随机数生成器,如下所示:
(don'不要忘记为此导入time包)
还有另一个名为crypto/rand的包,可用于生成更好的随机值(此生成器还可能考虑用户的鼠标移动、处理器的当前热量和许多其他因素)。但是,此包中的函数要慢几倍,除非您不编写密码短语生成器(或其他安全相关的东西),正常的兰德包可能没问题。
nnt7mjpx2#
您必须首先接种RNG。
我从来没用过围棋,但可能是
rand.Seed(x);
insrf1ej3#
rand.Seed(time.Now().UnixNano())
在Ubuntu上工作。我花了很长时间研究rand.Seed(time.Nanoseconds())
。我终于找到了这个例子:谷歌搜索2.1在戈兰旅游。5ktev3wc4#
总结以上答案,你可以用
rand.Seed(n)
编写自己的随机数生成器。每次播种时n必须是不同的数字。下面是一个例子: