Goでrand使うときはseedを設定しましょう
at 2017-03-28 12:11 (UTC)
Go でランダムデータ生成を書いていたら、何度やっても同じ結果になった。
package main
import (
"fmt"
"math/rand"
)
func main() {
for i := 0; i < 10; i++ {
fmt.Println(rand.Int())
}
}
こんなコードを実行すると、
5577006791947779410
8674665223082153551
6129484611666145821
4037200794235010051
3916589616287113937
6334824724549167320
605394647632969758
1443635317331776148
894385949183117216
2775422040480279449
毎回こうなる。これは rand.Float32
や rand.Intn
でも同様で、ようするに自分で seed
を設定しない限り、固定の seed
が設定されるようだ。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
for i := 0; i < 10; i++ {
fmt.Println(rand.Int())
}
}
とこんな感じで必ず最初に rand.Seed
を設定しましょう。