Résolution de la répétition de nombres aléatoires dans Go
Dans Go, la génération de nombres aléatoires peut parfois entraîner une répétition inattendue, en particulier lors de l'utilisation de rand.Intn( n int) int pour générer des entiers aléatoires. Cela est attribué au fait que la source par défaut utilisée par les fonctions de nombres aléatoires de niveau supérieur, telles que rand.Intn, produit une séquence déterministe de valeurs lorsqu'un programme est exécuté consécutivement.
Pour résoudre ce problème, le La solution réside dans l'amorçage du générateur de nombres aléatoires à l'aide de la fonction rand.Seed(). L'amorçage fournit au générateur une valeur aléatoire qui sert de paramètre d'initialisation. Une pratique courante consiste à utiliser l'horodatage Unix actuel comme graine :
<code class="go">rand.Seed(time.Now().UnixNano())</code>
Par exemple, au lieu de :
<code class="go">package main import ( "fmt" "math/rand" ) func main() { fmt.Println(rand.Intn(10)) }</code>
Qui renverra toujours le même nombre aléatoire, ensemençant le générateur garantira un nombre aléatoire différent pour chaque exécution :
<code class="go">package main import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().UnixNano()) fmt.Println(rand.Intn(10)) }</code>
Rappelez-vous que sans appeler rand.Seed(), le générateur se comporte comme s'il était amorcé par la valeur 1, conduisant à la répétition de nombres aléatoires.
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!