理解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中文網其他相關文章!