golang隨機數採坑

2021-09-01 18:22:51 字數 1068 閱讀 1266

突然發現golang產生的隨機數並不是那麼隨機而是有一定規律的

先看一段**

package main

import(

"fmt"

"time"

"math/rand"

)func main()

}

我想產生乙個隨機5分鐘的休眠,而現實是我有大量的客戶端請求api,這個請求實時性要求並不高,為了避免所有客戶端同一時間請求api造成服務端壓力,所以想每個客戶端啟動時休眠乙個隨機時間,就不會所有的機器都同一時間請求api,結果這段**的執行結果,並不那麼隨機而是有一定規律的。執行結果如下:

[root@10-3-6-194-ywkf workplace]# go run 1.go 

4m41s

1m27s

47s59s

3m1s

18s25s

2m20s

4m16s

0s[root@10-3-6-194-ywkf workplace]# go run 1.go

4m41s

1m27s

47s59s

3m1s

18s25s

2m20s

4m16s

0s

每次執行的結果都一樣,所以我猜想,要是我的所有客戶端同一時間啟動,本來想著隨機休眠乙個時間,就不會一起請求api。這樣的話所有機器同一時間啟動,休眠的時間也一樣,就根本達不到我的預期。也沒時間去了解go底層這個rand是怎麼實現的。先解決問題再說。

package main

import(

"fmt"

"time"

"math/rand"

)func main()

fmt.println("***************==")

rd := rand.new(rand.newsource(time.now().unixnano()))

for i :=0;i<10;i++

}

第二個for迴圈裡每次生成的隨機數就都不一樣了。

SQL Server踩坑 隨機數

目的 想在原本表的基礎上插入一列隨機數,用來匹配某個內容,達到字段內容隨機輸出的目的。但不巧的是 sql server 向一列中插入隨機數時,並不能逐個的插入隨機數,它的隨機數生成函式 rand 只執行了一次,然後將結果批量更新到你所需要的列中,這樣導致的結果就是該字段的列都是同乙個隨機數。過程如下...

隨機數 偽隨機數

隨機數 偽隨機數 rand函式在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次呼叫rand函式生成的偽隨機數序列都是一樣的。srand unsigned seed 通過引數seed改變系統提供的種子值,從而可以使得每次呼...

使用 SecureRandom 產生隨機數 坑

背景 專案裡用到 random 的地方定義一下 random 變數 如下 在用 sonar 進行檢查時,sonar 建議使用securerandom.getinstancestrong 來初始化,如下 private random rand securerandom.getinstancestron...