問題:
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中文網其他相關文章!