web-dev-qa-db-ja.com

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

質問:

pick a random reason」の部分を実行することで役立つ組み込み関数がありますか?

30
Amistad

関数 Intn from Randパッケージを使用して、ランダムインデックスを選択します。

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

他の解決策は、Randオブジェクトを使用することです。

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

ランダムな整数modスライス長を選択するだけです:

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

遊び場: http://play.golang.org/p/fEHElLJrEZ 。 (Rand.Seed。)

16
Ainar-G