Heim  >  Artikel  >  Backend-Entwicklung  >  Warum wiederholen sich Zufallszahlen in Go und wie können wir das beheben?

Warum wiederholen sich Zufallszahlen in Go und wie können wir das beheben?

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 09:14:02900Durchsuche

Why Do Random Numbers Repeat in Go and How Can We Fix it?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn