0
17
06
30
为了账号安全,请及时绑定邮箱和手机立即绑定

为什么每次重新启动程序时 math/rand 都会返回相同的结果?

为什么每次重新启动程序时 math/rand 都会返回相同的结果?

Go
米脂 2021-08-16 19:30:12
我有点困惑。我有一个随机字符串生成器,这是代码:package utilsimport (  "fmt"  "math/rand")var chars = []rune("abcdefghijklmnopqrstuvwxyz0123456789")func RandSeq(n int) string {  b := make([]rune, n)  for i := range b {    b[i] = chars[rand.Intn(len(chars))]  }  fmt.Println(string(b))  return string(b)}每次我运行它时,它都会生成一个新的随机字符串,但如果我重新启动服务器,结果会重复。以下是一些结果:go run main.gofpllngzieyoh43e0133ols6k1hh2gdnyxxvi7hvszwk1b182tvjzjpezi4hx9gvmkir0xcta0opsb5qipjzb3h3x9kcegta5m1zcv5drxckn42gb50anxndsckjdwgfw5japz01zicapy9eqixuc9uehq235v48c51wgg1gypq4s9miwn1dxkjqd614m58f0fyy29g6ujmxbouxshy2plmkmhlnmdbfhf7kq8u26873eql4yyp7fyilbb72nrtlcgo run main.gofpllngzieyoh43e0133ols6k1hh2gdnyxxvi7hvszwk1b182tvjzjpezi4hx9gvmkir0xcta0opsb5qipjzb3h3x9kcegta5m1zcv5drxckn42gb50anxndsckjdwgfw5japz01zicapy9eqixuc9uehq235v48c知道为什么会这样吗?
查看完整描述

2 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

在生成任何随机数之前,您需要为随机数生成器设置种子。一个很好的使用价值是当前的 unix 时间戳:


import (

    "math/rand"

    "time"

)


func main() {

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

}

请注意,您应该只在启动时(或分叉后)为 RNG 播种一次,而不是在每次生成随机数之前。


查看完整回答
反对 回复 2021-08-16

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号