ホームページ  >  記事  >  バックエンド開発  >  ## Go コードが毎回同じ乱数を生成するのはなぜですか?

## Go コードが毎回同じ乱数を生成するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 05:01:30538ブラウズ

## Why Does My Go Code Generate the Same Random Number Every Time?

Go での乱数生成を理解する

Go では、 rand.Intn(n int) int 関数は非負の擬似乱数を生成します。デフォルトの共有ソースからの範囲 [0, n) の乱数。ただし、ユーザーは、この関数が実行ごとに同じ乱数を生成しているように見える状況に遭遇する可能性があります。これは、デフォルトのソースが適切にシードされていない場合に発生する可能性があります。

デフォルトの動作とシード

rand パッケージのドキュメントには、rand.Seed() が適切にシードされていない場合に記載されています。明示的に呼び出された場合、デフォルトの Source には値 1 がシードされます。これは、乱数ジェネレータが決定論的に動作し、実行ごとに同じ値のシーケンスを生成することを意味します。

真のランダム性のための適切なシード

真のランダム性を確保するには、ランダムなシード値を指定して rand.Seed() を呼び出すことをお勧めします。一般的なアプローチは、次の例に示すように、現在の Unix タイムスタンプを使用することです。

<code class="go">rand.Seed(time.Now().UnixNano())</code>

Unix タイムスタンプなど、常に変化する値を指定して rand.Seed() を呼び出すと、デフォルトの Source は次のようになります。実行ごとに異なる決定的な状態に初期化されます。これにより、真の乱数が生成されます。

以上が## Go コードが毎回同じ乱数を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。