Go の Rand パッケージを使用して真の乱数を生成するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-10 08:48:03
オリジナル
157 人が閲覧しました

How to Generate Truly Random Numbers with Go's Rand Package?

Rand パッケージを使用した Go での疑似乱数生成のトラブルシューティング

質問:

Go の rand パッケージは、 Int31n 関数は疑似乱数を生成しますが、繰り返し実行すると同じ出力が得られるようです。関数が呼び出されるたびに真にランダムな結果を取得する方法はありますか?

回答:

rand パッケージは決定論的な擬似乱数生成器 (PRNG) を採用しています。プログラムが実行されるたびに、PRNG は「シード」と呼ばれる固定の初期値に基づいて同じ一連の数値を生成します。

実行ごとに異なる乱数を生成するには、ジェネレーターを次のコマンドで初期化することが重要です。ユニークな種。一般的なアプローチの 1 つは、プログラムが実行されるたびに変化する現在時刻をナノ秒単位で使用することです。これは、次のコードを使用して実行できます。

<code class="go">import "time"

func main() {
    rand.Seed(time.Now().UnixNano())
    fmt.Println(rand.Int31n(100))
}</code>
ログイン後にコピー

または、crypto/rand パッケージは、より安全なランダム性のソースを提供します。マウスの動き、プロセッサの温度、キーボード入力など、さまざまなシステム ソースからエントロピーを収集します。ただし、rand パッケージに比べてパフォーマンスが遅くなる可能性があります。

一意のシードを設定するか、crypto/rand パッケージを利用することで、rand.Int31n 関数が呼び出されるたびに真の乱数を生成するようにできます。 .

以上がGo の Rand パッケージを使用して真の乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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