Maison >développement back-end >Golang >Pourquoi `rand.Intn()` de Go renvoie-t-il le même numéro à plusieurs reprises ?

Pourquoi `rand.Intn()` de Go renvoie-t-il le même numéro à plusieurs reprises ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-09 20:57:14325parcourir

Why Does Go's `rand.Intn()` Return the Same Number Repeatedly?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn