首頁 > 後端開發 > Golang > 為什麼 Go 的 rand.Intn() 會重複回傳相同的數字?

為什麼 Go 的 rand.Intn() 會重複回傳相同的數字?

Mary-Kate Olsen
發布: 2024-12-09 20:57:14
原創
329 人瀏覽過

Why Does Go's `rand.Intn()` Return the Same Number Repeatedly?

理解 Go 的 rand.Intn

Go 標準庫提供了用於產生隨機數的 rand 套件。但是,rand.Intn(n) 函數在重複呼叫時始終會傳回相同的值。這種行為提出了為什麼會發生的問題。答案在於兩個關鍵因素。

未初始化的全域來源

預設情況下,rand 套件使用產生確定性值序列的全域來源。這意味著像 rand.Intn() 這樣的函數的輸出保持不變,除非這個 Source 用種子初始化。

要解決這個問題,必須使用 rand.Seed() 設定一個隨機種子。一個常見的方法是使用從time.Now().UnixNano() 獲得的時間戳作為種子:

rand.Seed(time.Now().UnixNano())
登入後複製

這會初始化Source 並將隨機性引入到rand.Intn() 產生的序列中。

Go Playground 快取

導致觀察到的行為的另一個因素是去遊樂場。此線上工具會快取程式碼片段的輸出,這可能會導致相同的隨機數序列始終顯示,而不管實際的隨機性如何。

為避免此快取問題,建議在本機上執行程式碼。這確保了在執行時產生隨機種子,從而產生唯一的值序列。

透過初始化全域 Source 並避免 Go Playground 緩存,可以確保 rand.Intn() 產生真正的隨機數Go 程式中的數字。

以上是為什麼 Go 的 rand.Intn() 會重複回傳相同的數字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板