首頁  >  文章  >  後端開發  >  如何使用 Go 的 Rand 套件產生真正的隨機數?

如何使用 Go 的 Rand 套件產生真正的隨機數?

Susan Sarandon
Susan Sarandon原創
2024-11-10 08:48:03179瀏覽

How to Generate Truly Random Numbers with Go's Rand Package?

使用Rand 套件解決Go 中的偽隨機數產生問題

問題:

Go 中的rand 包提供了Int31n 函數產生偽隨機數,但重複執行後似乎會產生相同的輸出。有沒有辦法在每次呼叫函數時獲得真正隨機的結果?

答案:

rand 套件採用確定性偽隨機數產生器(PRNG)。每次執行程式時,PRNG 都會根據稱為「種子」的固定初始值產生相同的數字序列。

要每次運行產生不同的隨機數,必須使用獨特的種子。一種常見的方法是使用以奈秒為單位的當前時間,該時間在每​​次執行程序時都會發生變化。這可以使用以下程式碼來完成:

<code class="go">import "time"

func main() {
    rand.Seed(time.Now().UnixNano())
    fmt.Println(rand.Int31n(100))
}</code>

或者,crypto/rand 套件提供更安全的隨機來源。它從各種系統來源收集熵,例如滑鼠移動、處理器溫度和鍵盤輸入。然而,與 rand 套件相比,它的性能可能會慢一些。

透過設定唯一的種子或利用 crypto/rand 套件,您可以確保 rand.Int31n 函數每次呼叫時產生真正的隨機數.

以上是如何使用 Go 的 Rand 套件產生真正的隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn