理解Go 的rand.Intn 函數中的差異
使用Go 的rand.Intn(n) 函數產生範圍內的隨機數字時[0, n-1],程式設計師可能會遇到令人驚訝的行為,即一致地返回相同的值。為了深入研究這個問題背後的原因,讓我們檢視兩個關鍵因素:
隨機數產生器(RNG)的初始化
Go 的rand 套件利用全域源來產生隨機數。預設情況下,該來源在每次程式執行時都會產生確定性的值序列。要自訂此行為並實現隨機性,使用 rand.Seed() 初始化預設來源至關重要。常見的做法是使用當前Unix 時間戳為生成器提供種子,如下所示:
rand.Seed(time.Now().UnixNano())
在Go Playground 上快取
The Go Playground,一個線上工具用於執行Go 程式碼,快取其輸出以提高效能。不幸的是,這種快取可能會幹擾隨機數的產生。因此,當在 Playground 上多次執行 rand.Intn(n) 時,由於快取的結果,可能會重複傳回相同的值。
因此,為了確保真正的隨機性並避免重複值,必須進行初始化適當地使用 RNG 並注意 Go Playground 的快取限制。
以上是為什麼 Go 的 rand.Intn 有時會傳回相同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!