Le package math/rand permet de générer des nombres pseudo-aléatoires.
Voici comment générer un entier aléatoire entre 0 et 99 :
import "math/rand"
n := rand.Intn(100) // n is a random int, 0 <= n < 100
La fonction rand.Float64 renvoie un nombre à virgule flottante aléatoire entre 0.0 et 1.0 :
f := rand.Float64() // f is a random float64, 0.0 <= f < 1.0
Il est aussi possible de mélanger un slice (ou d'autres structures de données) :
x := []string{"a", "b", "c", "d", "e"}
// shuffling the slice put its elements into a random order
rand.Shuffle(len(x), func(i, j int) {
x[i], x[j] = x[j], x[i]
})
Les séquences de nombres générées par le package math/rand ne sont pas vraiment aléatoires.
Pour une valeur de « graine » donnée, les résultats sont entièrement déterministes.
À partir de Go 1.20, la graine est choisie automatiquement au hasard, si bien que tu verras une séquence de nombres aléatoires différente à chaque exécution de ton programme.
Dans les versions antérieures de Go, la graine valait 1 par défaut.
Ainsi, pour obtenir des séquences différentes d'une exécution du programme à l'autre, il fallait initialiser manuellement le générateur de nombres aléatoires, par exemple avec l'heure courante, avant de récupérer le moindre nombre aléatoire.
rand.Seed(time.Now().UnixNano())