理解Go 中的隨機數產生
在Go 中, rand.Intn(n int) int 函數產生一個非負偽-來自預設共享來源的[0, n) 範圍內的隨機數。但是,用戶可能會遇到此函數似乎每次運行都會產生相同隨機數的情況。如果預設來源未正確播種,則可能會發生這種情況。
預設行為與播種
rand 套件的文件指出,如果 rand.Seed() 不是明確呼叫時,預設 Source 的種子值為 1。這意味著隨機數產生器的行為是確定性的,並且每次運行都會產生相同的值序列。
正確的種子播種以實現真正的隨機性
為了確保真正的隨機性,建議使用隨機種子值來呼叫 rand.Seed() 。常見的方法是使用目前的Unix 時間戳,如下例所示:
<code class="go">rand.Seed(time.Now().UnixNano())</code>
透過使用不斷變化的值(例如Unix 時間戳)來呼叫rand.Seed(),預設Source 是每次運行都初始化為不同的確定性狀態。這會產生真正的隨機數。
以上是## 為什麼我的 Go 程式碼每次都會產生相同的隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!