2015-11-30 21 views
13

Also auf meiner Suche nach neuen Sprachen, habe ich beschlossen, Go zu lernen und dies ist der allererste Tag, also bitte sei sanft zu mir..Ich habe ein Stück von Werten und ich brauche nach dem Zufallsprinzip ein Wert Pick-up und es dann mit einem festen string..This verketten ist, was ich bis jetzt habe ..Wählen Sie einen zufälligen Wert von einem Go Slice

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) 
} 

gibt es eine eingebaute Funktion, die mir helfen kann, dass „einen zufälligen Grund holen“ -Teil. .?

+1

Verwandte, könnten Sie diese Frage finden und beantworten nützlich: [? Wie eine zufällige Zeichenfolge mit einer festen Länge in golang erzeugen] (http://stackoverflow.com/a/31832326/1705598) Es enthält Ihre Frage als Unteraufgabe, das heißt, zufällige Buchstaben aus einem Stück Runen oder Zeichen zu wählen. Es könnte Ihnen ein paar gute Tipps geben, was die "zufällige" Welt von Go betrifft, was im Hintergrund passiert und wie effizient verschiedene Lösungen sind. – icza

+1

Die Antwort auf Ihre Frage finden Sie in der Dokumentation zum math/rand-Paket: https://golang.org/pkg/math/rand/ - Überprüfen Sie das erste Codebeispiel;) – kostya

+1

Tipps: Geben Sie Ihren Code ein – holys

Antwort

38

Verwenden Sie die Funktion Intn von rand Paket, um einen zufälligen Index auszuwählen.

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))]) 

Andere Lösung ist Rand Objekt zu verwenden.

s := rand.NewSource(time.Now().Unix()) 
r := rand.New(s) // initialize local pseudorandom generator 
r.Intn(len(reasons)) 
+0

Perfekt! Vielen Dank! –

+2

Für den Rekord, rand.Seed ... wird auch benötigt. – simonmorley

8

nur eine zufällige ganze Zahl mod slice Länge wählen:

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]) 

Spielplatz: http://play.golang.org/p/fEHElLJrEZ. (Beachten Sie die Empfehlung über rand.Seed.)

Verwandte Themen