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() 这个函数吗
var seededRand = rand.New(rand.NewSource(time.Now().UnixNano()))
//windows可以将就用一下,注意:不是线程安全的..
是windows是原因,windows系统15ms才会更新一次系统时间,循环的时候这些大概率都是在15ms之内发生的,所以每次都取到了这个种子的伪随机数的第一个,一个可以参考的解决办法是,把设置随机数种子这行代码,放到循环请求随机函数前面,随机数种子是全局的,只需保证每次进行随机序列计算使用不同种子即可,不必每次随机都用新的种子