Heim > Artikel > Backend-Entwicklung > Wie generiert man mit dem Rand-Paket von Go wirklich zufällige Zahlen?
Frage:
Das Rand-Paket in Go bietet die Int31n-Funktion zum Generieren von Pseudozufallszahlen, aber sie scheint bei wiederholter Ausführung die gleiche Ausgabe zu liefern. Gibt es eine Möglichkeit, bei jedem Aufruf der Funktion wirklich zufällige Ergebnisse zu erhalten?
Antwort:
Das Rand-Paket verwendet einen deterministischen Pseudozufallszahlengenerator (PRNG). Jedes Mal, wenn das Programm ausgeführt wird, generiert der PRNG die gleiche Zahlenfolge basierend auf einem festen Anfangswert, der als „Seed“ bekannt ist.
Um bei jedem Lauf unterschiedliche Zufallszahlen zu generieren, ist es wichtig, den Generator mit a zu initialisieren einzigartiger Samen. Ein gängiger Ansatz besteht darin, die aktuelle Zeit in Nanosekunden zu verwenden, die sich bei jeder Programmausführung ändert. Dies kann mit dem folgenden Code erfolgen:
<code class="go">import "time" func main() { rand.Seed(time.Now().UnixNano()) fmt.Println(rand.Int31n(100)) }</code>
Alternativ bietet das crypto/rand-Paket eine sicherere Zufallsquelle. Es erfasst Entropie aus verschiedenen Systemquellen, beispielsweise Mausbewegungen, Prozessortemperatur und Tastatureingaben. Allerdings kann seine Leistung im Vergleich zum Rand-Paket langsamer sein.
Durch das Festlegen eines eindeutigen Startwerts oder die Verwendung des Pakets crypto/rand können Sie sicherstellen, dass die Funktion rand.Int31n bei jedem Aufruf echte Zufallszahlen generiert .
Das obige ist der detaillierte Inhalt vonWie generiert man mit dem Rand-Paket von Go wirklich zufällige Zahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!