Go の rand.Intn 関数の不一致を理解する
Go の rand.Intn(n) 関数を利用して範囲内の乱数を生成する場合[0, n-1] の場合、プログラマは同じ値が一貫して返されるという驚くべき動作に遭遇する可能性があります。この問題の背後にある理由を詳しく調べるために、2 つの重要な要素を調べてみましょう:
乱数ジェネレーター (RNG) の初期化
Go の rand パッケージはグローバル ソースを利用して、乱数を生成します。デフォルトでは、このソースはプログラムが実行されるたびに決定的な値のシーケンスを生成します。この動作をカスタマイズしてランダム性を実現するには、rand.Seed() を使用してデフォルトのソースを初期化することが重要です。一般的な方法は、次のように、現在の Unix タイムスタンプをジェネレーターにシードすることです。
rand.Seed(time.Now().UnixNano())
Go Playground でのキャッシュ
Go Playground、オンライン ツールGo コードを実行する場合、その出力をキャッシュしてパフォーマンスを向上させます。残念ながら、このキャッシュは乱数の生成を妨げる可能性があります。したがって、プレイグラウンドで rand.Intn(n) を複数回実行すると、キャッシュされた結果により同じ値が繰り返し返される可能性があります。
したがって、真のランダム性を確保し、値の繰り返しを回避するには、初期化することが不可欠です。 RNG を適切に変更し、Go Playground のキャッシュ制限に注意してください。
以上がGo の `rand.Intn` が同じ値を返す場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。