ホームページ > バックエンド開発 > Golang > Golang で重複した乱数の生成を回避するにはどうすればよいですか?

Golang で重複した乱数の生成を回避するにはどうすればよいですか?

WBOY
リリース: 2024-06-01 16:46:01
オリジナル
475 人が閲覧しました

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) は同時環境で繰り返し乱数を生成する可能性があります。 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()

この問題を解決するには、rand.New(rand.Source) 関数を使用して新しい乱数ジェネレーターを作成し、io.Reader をエントロピー ソースとして使用します。 。ほとんどの場合、エントロピー ソースとして rand.NewSource(time.Now().UnixNano()) を使用するだけで十分です。 🎜🎜これは、rand.NewSource を使用して重複した乱数の生成を回避する方法を示すサンプル コードです。 🎜rrreee🎜 rand.NewSourcetime を使用します。 Now().UnixNano() は、一意で予測不可能な乱数を生成するエントロピーのソースとして機能します。 🎜

以上がGolang で重複した乱数の生成を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート