我试图在Go中生成一个随机字符串,这是我到目前为止编写的代码:
package main
import (
"bytes"
"fmt"
"math/rand"
"time"
)
func main() {
fmt.Println(randomString(10))
}
func randomString(l int) string {
var result bytes.Buffer
var temp string
for i := 0; i < l; {
if string(randInt(65, 90)) != temp {
temp = string(randInt(65, 90))
result.WriteString(temp)
i++
}
}
return result.String()
}
func randInt(min int, max int) int {
rand.Seed(time.Now().UTC().UnixNano())
return min + rand.Intn(max-min)
}
我的执行速度很慢。使用进行播种time
会在一定时间内带来相同的随机数,因此循环会一次又一次地迭代。如何改善我的代码?
每次设置相同的种子,您将获得相同的序列。因此,当然,如果您将种子设置为快速循环中的时间,则可能会多次调用相同的种子。
在您的情况下,在您调用randInt
函数直到拥有不同的值之前,您正在等待时间(由Nano返回)。
对于所有伪随机库,您只需设置一次种子,例如在初始化程序时,除非您特别需要重现给定的序列(通常仅用于调试和单元测试)。
之后,您只需调用Intn
即可获取下一个随机整数。
将rand.Seed(time.Now().UTC().UnixNano())
行从randInt函数移至main的开头,一切将会更快。
还请注意,我认为您可以简化字符串的构建:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UTC().UnixNano())
fmt.Println(randomString(10))
}
func randomString(l int) string {
bytes := make([]byte, l)
for i := 0; i < l; i++ {
bytes[i] = byte(randInt(65, 90))
}
return string(bytes)
}
func randInt(min int, max int) int {
return min + rand.Intn(max-min)
}
问题内容: JavaScript函数返回一个介于0到1之间的随机值,该值会根据当前时间自动播种(我相信类似于Java)。但是,我认为没有任何办法可以为其设置种子。 如何制作一个可以提供自己的种子值的随机数生成器,以使它生成可重复的(伪)随机数序列? 问题答案: 一种选择是http://davidbau.com/seedrandom,它是可播种的基于RC4的Math.random()插入式替换,具有
问题内容: 我正在尝试在short原始数据类型的范围内(-32768,32767)生成随机整数。java Random对象仅生成正数。我将如何在该间隔内随机创建数字?谢谢。 问题答案: 您随机选择,然后减去
本文向大家介绍如何生成一个随机数?相关面试题,主要包含被问及如何生成一个随机数?时的应答技巧和注意事项,需要的朋友参考一下
我已经编写了下面的代码。我已经运行了这个程序,它允许用户猜测正确的数字并成功返回消息。然而,我不能让它重新生成一个新的随机数?我也不能包括一个选项来询问用户是否想退出。请帮忙。谢谢你。
random 生成随机数包 文档:https://www.npmjs.com/package/random 安装:npm install --save random 封装代码: app / extend / context.js // 导入 jwt const jwt = require('jsonwebtoken') // 导入随机数包 const random = require('rando