每次隨機(jī)金額都一樣
func?SimpleRand(count,?amount?int64)?int64?{ ???//當(dāng)紅包數(shù)量剩余一個(gè)的時(shí)候,就直接返回剩余金額 ???if?count?==?1?{ ??????return?amount ???} ???//計(jì)算最大可高度金額 ???max?:=?amount?-?min*count ???rand.Seed(time.Now().UnixNano()) ???x?:=?rand.Int63n(max)?+?min ???return?x }
運(yùn)行結(jié)果:650,650,650,650,650,650,650,650,650,650,
每個(gè)循環(huán)都是一樣的650,我用的是windows開發(fā),難道是不支持
UnixNano()?這個(gè)函數(shù)嗎
2020-05-15
//windows可以將就用一下,注意:不是線程安全的..
2020-04-04
是windows是原因,windows系統(tǒng)15ms才會(huì)更新一次系統(tǒng)時(shí)間,循環(huán)的時(shí)候這些大概率都是在15ms之內(nèi)發(fā)生的,所以每次都取到了這個(gè)種子的偽隨機(jī)數(shù)的第一個(gè),一個(gè)可以參考的解決辦法是,把設(shè)置隨機(jī)數(shù)種子這行代碼,放到循環(huán)請(qǐng)求隨機(jī)函數(shù)前面,隨機(jī)數(shù)種子是全局的,只需保證每次進(jìn)行隨機(jī)序列計(jì)算使用不同種子即可,不必每次隨機(jī)都用新的種子