2015-11-30 6 views
13

Quindi, nel mio tentativo di imparare nuove lingue, ho deciso di imparare Go e questo è il primissimo giorno quindi per favore sii gentile con me..ho una fetta di valori e ho bisogno a modo casuale pick-up un valore e quindi concatenare con uno string..This fisso è quello che ho fino ad ora ..Scegli un valore casuale da una fetta Go

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

c'è una funzione incorporata che può aiutarmi a fare che "scegliere un motivo casuale" parte. .?

+1

correlati, si potrebbe trovare questa domanda e risposta utile: [? Come generare una stringa casuale di una lunghezza fissa in golang] (http://stackoverflow.com/a/31832326/1705598) contenga il vostro domanda come sotto-compito, cioè scegliendo lettere casuali da una fetta di rune o caratteri. Potrebbe darti alcuni buoni consigli sul mondo "casuale" di Go, su cosa sta accadendo in background e sull'efficienza delle diverse soluzioni. – icza

+1

La risposta alla tua domanda è nella documentazione del pacchetto di matematica/rand: https://golang.org/pkg/math/rand/ - controlla il primo esempio di codice;) – kostya

+1

Suggerimenti: gofmt il tuo codice – holys

risposta

38

Utilizzare la funzione Intn dal pacchetto rand per selezionare un indice casuale.

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

Un'altra soluzione è utilizzare l'oggetto Rand.

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

Perfetto! Grazie! –

+2

Per la registrazione è necessario anche rand.Seed .... – simonmorley

8

basta scegliere un casuale intero mod lunghezza fetta:

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

Playground: http://play.golang.org/p/fEHElLJrEZ. (Nota il consiglio circa rand.Seed.)