一、介绍
让咱们用 Go 语言创立一个伪随机数。
这是一个简略的代码:
从 0 到 9 的数字输入 10 次。
func TestRandIntn(t *testing.T) { rand.Seed(time.Now().UnixNano()) for i := 0; i < 10; i++ { fmt.Println("number is ", rand.Intn(10)) }}
输入:
number is 7number is 1number is 6number is 1number is 8number is 7number is 3number is 4number is 9number is 9
要害是在名为rand.Seed(time.Now().UnixNano())的中央给出作为随机数起源的种子。
给个种子的起因是这里应用的函数rand.Intn在rand包中生成新的随机数生成器的时候如同初始化rand.NewSource(1)一样,所以给个种子,如同是须要收回不同的随机数。
上面是一个没有收获的具备雷同后果的示例。
func TestRandIntnNoSeed(t *testing.T) { // 无种子rand.Intn 随机 for i := 0; i < 10; i++ { fmt.Print(rand.Intn(10), " ") } fmt.Println(" ") // rand.NewSource初始化rand并执行 myRand := rand.New(rand.NewSource(1)) for i := 0; i < 10; i++ { fmt.Print(myRand.Intn(10), " ") } fmt.Println(" ") // 增加种子在rand myRand.Seed(time.Now().UnixNano()) for i := 0; i < 10; i++ { fmt.Print(myRand.Intn(10), " ") }}
第一次运行
=== RUN TestRandIntnNoSeed1 7 7 9 1 8 5 0 6 0 1 7 7 9 1 8 5 0 6 0 7 6 9 1 4 2 1 5 3 1 --- PASS: TestRandIntnNoSeed (0.00s)PASS
第二次运行
=== RUN TestRandIntnNoSeed1 7 7 9 1 8 5 0 6 0 1 7 7 9 1 8 5 0 6 0 3 9 3 8 6 6 2 5 2 6 --- PASS: TestRandIntnNoSeed (0.00s)PASS