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

为什么每次重新启动程序时 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
  • 2 回答
  • 0 关注
  • 278 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信