问答详情
源自:6-11 红包算法-2倍均值算法设计和编码实践

每次随机金额都一样

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() 这个函数吗


提问者:潇洒哥gogo 2020-01-05 12:31

个回答

  • 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之内发生的,所以每次都取到了这个种子的伪随机数的第一个,一个可以参考的解决办法是,把设置随机数种子这行代码,放到循环请求随机函数前面,随机数种子是全局的,只需保证每次进行随机序列计算使用不同种子即可,不必每次随机都用新的种子