2016-09-16 15 views
2

は、誰も私に教えてくださいすることができ、なぜここに行く例:ゴーrand.Intn同じ番号/値は

https://tour.golang.org/basics/1

常に(10)rand.Intnに対して同じ値を返しますか?

+0

「このようなプログラムが実行される環境は決定的なので、サンプルプログラムを実行するたびにrand.Intnは同じ番号を返します。 –

+0

@BojanB私はそれを見ましたが、私は播種がそれを修正すると思った。 icza(受け入れられた答えを参照)は正しい方向に私を指摘した。 – appliedJames

答えて

7

2の理由:

  1. あなたはrand.Seed()を使用してrandパッケージのrand.Intn()や他の機能が使用するグローバルSourceをinitalizeする必要があります。例:

    rand.Seed(time.Now().UnixNano()) 
    

    Difficulty with Go Rand packageの可能な複製を参照してください。 randのパッケージドキュメントから引用
    :などのfloat64やintとして

    トップレベルの機能は、デフォルトでは、値の決定論的シーケンスプログラムが実行されるたびに生成ソースを共有します。実行ごとに異なる動作が必要な場合は、Seed関数を使用してデフォルトのSourceを初期化します。

  2. Tourは、その出力をキャッシュGo Playground上の例を実行します。
    詳細はWhy does count++ (instead of count = count + 1) change the way the map is returned in Golangを参照してください。

+0

インポートに「時間」を含め、rand.Intn行の前にその行を入れましたが、毎回0を返すようになりました。 – appliedJames

+0

@appliedJames理由#2もご覧ください。それでも問題が解決しない場合は、質問を編集してコードを投稿してください。 [最小限の、完全で検証可能な例]を目指してください(http://stackoverflow.com/help/mcve)。 – icza

+0

よろしくお願いいたします。実際、この全体の質問はおそらく削除されるべきです。 :) – appliedJames

関連する問題