Maison >développement back-end >Golang >Pourquoi « rand.Intn » de Go renvoie-t-il parfois la même valeur ?
Comprendre les divergences dans la fonction rand.Intn de Go
Lors de l'utilisation de la fonction rand.Intn(n) de Go pour générer un nombre aléatoire dans la plage [0, n-1], les programmeurs peuvent rencontrer un comportement surprenant où la même valeur est renvoyée de manière cohérente. Pour approfondir les raisons de ce problème, examinons deux facteurs critiques :
Initialisation du générateur de nombres aléatoires (RNG)
Le package Rand de Go exploite une source mondiale pour générer des nombres aléatoires. Par défaut, cette source produit une séquence déterministe de valeurs à chaque exécution du programme. Pour personnaliser ce comportement et obtenir un caractère aléatoire, il est crucial d'initialiser la source par défaut à l'aide de rand.Seed(). Une pratique courante consiste à amorcer le générateur avec l'horodatage Unix actuel, comme ceci :
rand.Seed(time.Now().UnixNano())
Mise en cache sur Go Playground
The Go Playground, un outil en ligne pour exécuter le code Go, met en cache sa sortie pour améliorer les performances. Malheureusement, cette mise en cache peut interférer avec la génération de nombres aléatoires. Par conséquent, lors de l'exécution de rand.Intn(n) plusieurs fois sur Playground, la même valeur peut être renvoyée à plusieurs reprises en raison des résultats mis en cache.
Par conséquent, pour garantir un véritable caractère aléatoire et éviter des valeurs répétées, il est essentiel d'initialiser le RNG de manière appropriée et soyez conscient des limitations de mise en cache de Go Playground.
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!