web-dev-qa-db-fra.com

Choisissez une valeur aléatoire dans une tranche Go

Situation:

J'ai une tranche de valeurs et je dois en extraire une valeur choisie au hasard. Ensuite, je veux le concaténer avec une chaîne fixe. Voici mon code jusqu'à présent:

func main() {
//create the reasons slice and append reasons to it
reasons := make([]string, 0)
reasons = append(reasons,
    "Locked out",
    "Pipes broke",
    "Food poisoning",
    "Not feeling well")

message := fmt.Sprint("Gonna work from home...", pick a random reason )
}

Question:

Existe-t-il une fonction intégrée, qui peut m'aider en faisant la partie " choisir une raison aléatoire "?

30
Amistad

Utilisez la fonction Intn du package Rand pour sélectionner un index aléatoire.

import (
  "math/Rand"
  "time"
)

// ...

Rand.Seed(time.Now().Unix()) // initialize global pseudo random generator
message := fmt.Sprint("Gonna work from home...", reasons[Rand.Intn(len(reasons))])

Une autre solution consiste à utiliser l'objet Rand.

s := Rand.NewSource(time.Now().Unix())
r := Rand.New(s) // initialize local pseudorandom generator 
r.Intn(len(reasons))
69
Grzegorz Żur

Choisissez simplement une longueur de tranche de mod entière aléatoire:

Rand.Seed(time.Now().Unix())
reasons := []string{
    "Locked out",
    "Pipes broke",
    "Food poisoning",
    "Not feeling well",
}
n := Rand.Int() % len(reasons)
fmt.Print("Gonna work from home...", reasons[n])

Aire de jeux: http://play.golang.org/p/fEHElLJrEZ . (Notez la recommandation concernant Rand.Seed.)

16
Ainar-G