Go 中的確定性隨機數產生
在Go 中,呼叫rand.Intn(n int) int 而不為隨機數生成器播種總是會發生回傳相同的數字序列。這是因為用於隨機數產生的預設來源是使用固定種子初始化的,從而有效地使其具有確定性。
為什麼會發生這種情況?
如根據官方文檔,rand.Intn 函數傳回一個偽隨機數,該隨機數是使用確定性演算法和種子值產生的。如果未指定種子,則使用預設種子 1,從而導致每次運行都會產生相同序列的數字。
正確播種隨機數產生
要產生真正的隨機數,為隨機數產生器每次運行使用不同的種子至關重要。這可以透過呼叫 rand.Seed() 函數並向其傳遞隨機種子值來實現。常見的做法是使用目前的 Unix 時間戳記作為種子,這可確保生成器每次執行時都會使用唯一的值進行初始化。
例如:
<code class="go">import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().UnixNano()) fmt.Println(rand.Intn(10)) }</code>
結論
透過正確播種隨機數產生器,您可以確保您的Go程式產生真正的隨機數,使它們不可預測並更能代表真實的隨機性。
以上是為什麼在沒有播種的情況下呼叫'rand.Intn”會導致 Go 中的數字序列相同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!