Maison  >  Article  >  développement back-end  >  Pourquoi les nombres aléatoires se répètent-ils dans Go et comment pouvons-nous y remédier ?

Pourquoi les nombres aléatoires se répètent-ils dans Go et comment pouvons-nous y remédier ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 09:14:02900parcourir

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

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!

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