Go での乱数の繰り返しへの対処
Go では、特に rand.Intn( を使用する場合) に乱数を生成すると、予期しない繰り返しが発生することがあります。 n int) ランダムな整数を生成するための int。これは、rand.Intn などのトップレベルの乱数関数で使用されるデフォルトのソースが、プログラムが連続して実行されるときに決定的な値のシーケンスを生成するという事実に起因します。
この問題を解決するには、解決策は、 rand.Seed() 関数を使用して乱数ジェネレーターをシードすることです。シード処理により、初期化パラメーターとして機能するランダムな値がジェネレーターに提供されます。一般的な方法は、現在の Unix タイムスタンプをシードとして使用することです:
<code class="go">rand.Seed(time.Now().UnixNano())</code>
たとえば、
<code class="go">package main import ( "fmt" "math/rand" ) func main() { fmt.Println(rand.Intn(10)) }</code>
の代わりに、常に同じ乱数を返し、ジェネレータをシードします。実行ごとに異なる乱数が保証されます:
<code class="go">package main import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().UnixNano()) fmt.Println(rand.Intn(10)) }</code>
rand.Seed() を呼び出さなければ、ジェネレーターは値 1 がシードされているかのように動作し、乱数が繰り返されることに注意してください。
以上がGo で乱数が繰り返されるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。