Maison  >  Article  >  développement back-end  >  Comment générer des nombres aléatoires uniques avec le package Go's Rand ?

Comment générer des nombres aléatoires uniques avec le package Go's Rand ?

DDD
DDDoriginal
2024-11-06 21:06:02754parcourir

How to Generate Unique Random Numbers with Go's Rand Package?

Surmonter la génération pseudo-aléatoire prévisible dans le package Rand de Go

Le package rand dans Go fournit un moyen de générer des nombres pseudo-aléatoires, mais par défaut, ceux-ci les nombres peuvent se répéter pour la même exécution de programme. Cela peut être problématique lors de la recherche de résultats vraiment aléatoires.

Identification du problème :

Considérez le code Go suivant :

package main

import (
    "fmt"
    "rand"
)

func main() {
    fmt.Println(rand.Int31n(100))
}

Lors de l'exécution de ce code code, vous remarquerez que le même nombre aléatoire est généré à chaque fois. Cela se produit parce que le package Rand initialise son générateur de nombres pseudo-aléatoires avec une graine constante, conduisant à des résultats prévisibles.

Solution :

Pour garantir des nombres aléatoires uniques à chaque exécution, vous devez fournir une graine différente avant de générer les nombres aléatoires. Une approche courante consiste à utiliser l'heure actuelle comme valeur de départ :

import (
    "fmt"
    "rand"
    "time"
)

func main() {
    // Initialize the random generator with the current time in nanoseconds
    rand.Seed(time.Now().UnixNano())

    fmt.Println(rand.Int31n(100))
}

En définissant la valeur de départ sur une valeur en constante évolution comme l'heure actuelle, vous obtenez une séquence de nombres pseudo-aléatoires unique pour chaque exécution de programme.

Alternative pour les applications sensibles :

Pour les applications qui nécessitent une génération de nombres aléatoires plus sécurisée, envisagez d'utiliser le package crypto/rand. Il utilise des sources d'entropie telles que les mouvements de la souris de l'utilisateur et la chaleur du système pour générer des valeurs aléatoires plus sécurisées. Cependant, cela a un coût en termes de performances.

Conclusion :

En définissant la graine sur une valeur dynamique telle que l'heure actuelle, vous pouvez surmonter la prévisibilité de l'heure actuelle. rand dans Go et génère des nombres vraiment aléatoires. Cette approche convient à la plupart des applications, tandis que les scénarios hautement sécurisés devraient prendre en compte le package crypto/rand.

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