Maison >développement back-end >Golang >Pourquoi `rand.Intn()` de Go renvoie-t-il le même numéro à plusieurs reprises ?
Comprendre les nombres aléatoires répétés dans Go's rand.Intn
La bibliothèque standard Go fournit le package rand pour générer des nombres aléatoires. Cependant, la fonction rand.Intn(n) renvoie systématiquement la même valeur lorsqu'elle est invoquée à plusieurs reprises. Ce comportement soulève la question de savoir pourquoi il se produit. La réponse réside dans deux facteurs clés.
Source globale non initialisée
Par défaut, le package rand utilise une source globale qui génère une séquence déterministe de valeurs. Cela signifie que la sortie de fonctions comme rand.Intn() reste la même à moins que cette source ne soit initialisée avec une graine.
Pour résoudre ce problème, il faut définir une graine aléatoire à l'aide de rand.Seed(). Une approche courante consiste à utiliser l'horodatage obtenu à partir de time.Now().UnixNano() comme graine :
rand.Seed(time.Now().UnixNano())
Cela initialise la source et introduit du caractère aléatoire dans la séquence générée par rand.Intn().
Go Playground Caching
Un autre facteur contribuant au comportement observé est le Go Playground. Cet outil en ligne met en cache la sortie des extraits de code, ce qui peut conduire à l'affichage cohérent de la même séquence de nombres aléatoires, quel que soit le caractère aléatoire réel.
Pour éviter ce problème de mise en cache, il est recommandé d'exécuter le code localement. Cela garantit que la graine aléatoire est générée au moment de l'exécution, ce qui donne une séquence unique de valeurs.
En initialisant la source globale et en évitant la mise en cache Go Playground, on peut garantir que rand.Intn() génère des valeurs véritablement aléatoires. numéros dans les programmes Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!