對rand.Intn 產生相同值進行故障排除
連結中提供的Go 範例確實為rand.Intn(10) 傳回相同的值除非修改以初始化隨機數產生器。這裡解釋一下:
-
未初始化的隨機數來源:
- rand.Intn 和rand 套件中的其他函數使用全域Source產生隨機數。
- 預設情況下,此 Source 未初始化,導致確定性序列。
- 要初始化 Source,請使用 rand.Seed(time.Now().UnixNano())。
-
Go Playground快取:
- Go Playground,範例為運行時,經常快取結果以提高效能。
- 此快取可能會影響隨機數產生的輸出,使其顯得具有確定性。
解決這些問題並一致地取得隨機數,請考慮以下步驟:
- 使用初始化隨機數產生器rand.Seed(time .Now().UnixNano()).
- 如果在Go Playground上運行範例,請在運行前清除輸出以避免快取。
透過以下操作透過這些步驟,您可以有效地使用 rand.Intn 產生隨機數,並避免重複接收相同的值。
以上是為什麼 Go 的 rand.Intn 有時會產生相同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!