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

每次随机金额都一样

func SimpleRand(count, amount int64) int64 {
   //当红包数量剩余一个的时候,就直接返回剩余金额
   if count == 1 {
      return amount
   }

   //计算最大可高度金额
   max := amount - min*count
   rand.Seed(time.Now().UnixNano())
   x := rand.Int63n(max) + min
   return x
}

运行结果:650,650,650,650,650,650,650,650,650,650,

每个循环都是一样的650,我用的是windows开发,难道是不支持

UnixNano() 这个函数吗


正在回答

2 回答

var seededRand = rand.New(rand.NewSource(time.Now().UnixNano()))

//windows可以将就用一下,注意:不是线程安全的..

0 回复 有任何疑惑可以回复我~

是windows是原因,windows系统15ms才会更新一次系统时间,循环的时候这些大概率都是在15ms之内发生的,所以每次都取到了这个种子的伪随机数的第一个,一个可以参考的解决办法是,把设置随机数种子这行代码,放到循环请求随机函数前面,随机数种子是全局的,只需保证每次进行随机序列计算使用不同种子即可,不必每次随机都用新的种子

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

每次随机金额都一样

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信