首頁  >  文章  >  後端開發  >  如何避免在 Golang 中產生重複的隨機數?

如何避免在 Golang 中產生重複的隨機數?

WBOY
WBOY原創
2024-06-01 16:46:01415瀏覽

在 Golang 中避免產生重複隨機數的方法:建立一個新的隨機數產生器 rand.New(rand.Source)。使用 rand.NewSource(time.Now().UnixNano()) 作為熵源。使用 rand.Intn(n) 產生隨機整數。

如何避免在 Golang 中生成重复的随机数?

如何避免在 Golang 中產生重複的隨機數?

在 Golang 中,產生隨機數字需要使用 math/rand 套件。使用 rand.Intn(n) 函數可以產生一個在 [0, n-1] 範圍內的隨機整數,其中 n 是正整數。但是,rand.Intn(n) 在並發環境下可能會產生重複的隨機數。

要解決這個問題,可以使用rand.New(rand.Source) 函式建立一個新的隨機數產生器,並使用io.Reader 作為熵源。在大多數情況下,使用 rand.NewSource(time.Now().UnixNano()) 作為熵源即可。

以下是一個範例程式碼,展示如何使用rand.NewSource 避免產生重複的隨機數字:

package main

import (
    "math/rand"
    "time"
)

func main() {
    // 创建一个新的随机数生成器,并使用时间戳作为熵源
    r := rand.New(rand.NewSource(time.Now().UnixNano()))

    // 生成 10 个随机整数
    for i := 0; i < 10; i++ {
        result := r.Intn(100)
        println(result)
    }
}

透過使用rand.NewSourcetime.Now().UnixNano() 作為熵源,可以產生唯一且不可預測的隨機數。

以上是如何避免在 Golang 中產生重複的隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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