Maison > développement back-end > Golang > 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
Libérer: 2024-11-06 21:06:02
original
934 Les gens l'ont consulté

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))
}
Copier après la connexion

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))
}
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal