首頁  >  文章  >  後端開發  >  為什麼 Go 中的 rand.Intn() 每次都會產生相同的數字?

為什麼 Go 中的 rand.Intn() 每次都會產生相同的數字?

Susan Sarandon
Susan Sarandon原創
2024-10-30 13:25:02521瀏覽

Why Does `rand.Intn()` in Go Generate the Same Number Every Time?

理解Go 的rand.Intn() 中相同的隨機數產生

為什麼rand.Intn() 總是產生相同的隨機數?對於使用Go 的初學者來說,由於以下程式碼,經常會出現這個問題:

<code class="go">package main

import (
    "fmt"
    "math/rand"
)

func main() {
    fmt.Println(rand.Intn(10)) 
}</code>

儘管文件聲稱提供[0, n) 範圍內的偽隨機數,但程式每次都會列印相同的數字

播種隨機數產生

關鍵在於正確播種隨機數產生器。預設行為是使用確定性種子,從而在程式執行過程中產生相同的數字序列。要修正這個問題:

<code class="go">rand.Seed(time.Now().UnixNano())</code>

此函數使用基於當前 Unix 時間戳記的種子初始化隨機數產生器。它確保每次運行都有不同的數字序列。

理解文件

rand.Intn() 的文件指出:「頂級函數......每次執行程式時都會產生確定性的值序列。

結論

透過在使用rand.Intn 之前播種隨機數產生器(),您可以克服重複隨機數的問題,確保正確產生非確定性序列。

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

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