Zufallszahlengenerierung in Go verstehen
In Go generiert die Funktion rand.Intn(n int) int ein nicht negatives Pseudo- Zufallszahl im Bereich [0, n) aus einer standardmäßigen gemeinsam genutzten Quelle. Es kann jedoch vorkommen, dass Benutzer auf Situationen stoßen, in denen diese Funktion bei jedem Durchlauf dieselbe Zufallszahl zu generieren scheint. Dies kann auftreten, wenn die Standardquelle nicht ordnungsgemäß geseedt ist.
Standardverhalten und Seeding
In der Dokumentation für das Rand-Paket heißt es, dass dies bei rand.Seed() nicht der Fall ist Wenn explizit aufgerufen, wird die Standardquelle mit dem Wert 1 geseedt. Dies bedeutet, dass sich der Zufallszahlengenerator deterministisch verhält und für jeden Lauf die gleiche Wertefolge erzeugt.
Richtiges Seeding für echte Zufälligkeit
Um echte Zufälligkeit sicherzustellen, wird empfohlen, rand.Seed() mit einem zufälligen Startwert aufzurufen. Ein gängiger Ansatz besteht darin, den aktuellen Unix-Zeitstempel zu verwenden, wie im folgenden Beispiel zu sehen:
<code class="go">rand.Seed(time.Now().UnixNano())</code>
Durch den Aufruf von rand.Seed() mit einem sich ständig ändernden Wert, wie dem Unix-Zeitstempel, ist die Standardquelle wird für jeden Lauf in einem anderen deterministischen Zustand initialisiert. Dies führt zur Erzeugung echter Zufallszahlen.
Das obige ist der detaillierte Inhalt von## Warum generiert mein Go-Code jedes Mal dieselbe Zufallszahl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!