每次随机金额都一样

来源:6-11 红包算法-2倍均值算法设计和编码实践

潇洒哥gogo

2020-01-05 12:31

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回答

  • Hozz
    2020-05-15 09:52:37
    var seededRand = rand.New(rand.NewSource(time.Now().UnixNano()))

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

  • 慕设计352712
    2020-04-04 22:02:09

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

3小时极简春节抢红包之Go的实战

【毕业设计】春节抢红包业务资金交易秒杀系统的架构设计和Golang实战

11898 学习 · 31 问题

查看课程

相似问题