Adressierung der Zufallszahlenwiederholung in Go
In Go kann die Generierung von Zufallszahlen manchmal zu unerwarteten Wiederholungen führen, insbesondere bei Verwendung von rand.Intn( n int) int zur Generierung zufälliger Ganzzahlen. Dies wird auf die Tatsache zurückgeführt, dass die Standardquelle, die von Zufallszahlenfunktionen der obersten Ebene wie rand.Intn verwendet wird, eine deterministische Folge von Werten erzeugt, wenn ein Programm nacheinander ausgeführt wird.
Um dieses Problem zu beheben, muss die Die Lösung besteht darin, den Zufallszahlengenerator mithilfe der Funktion rand.Seed() zu starten. Beim Seeding erhält der Generator einen Zufallswert, der als Initialisierungsparameter dient. Eine gängige Praxis besteht darin, den aktuellen Unix-Zeitstempel als Startwert zu verwenden:
<code class="go">rand.Seed(time.Now().UnixNano())</code>
Zum Beispiel anstelle von:
<code class="go">package main import ( "fmt" "math/rand" ) func main() { fmt.Println(rand.Intn(10)) }</code>
Das gibt immer die gleiche Zufallszahl zurück und setzt den Generator stellt für jeden Lauf eine andere Zufallszahl sicher:
<code class="go">package main import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().UnixNano()) fmt.Println(rand.Intn(10)) }</code>
Denken Sie daran, dass sich der Generator ohne Aufruf von rand.Seed() so verhält, als wäre er mit dem Wert 1 gesät, was zur Wiederholung von Zufallszahlen führt.
Das obige ist der detaillierte Inhalt vonWarum wiederholen sich Zufallszahlen in Go und wie können wir das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!