質問:
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 サイトの他の関連記事を参照してください。