一、介绍
让咱们用 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 7
number is 1
number is 6
number is 1
number is 8
number is 7
number is 3
number is 4
number is 9
number 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 TestRandIntnNoSeed
1 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 TestRandIntnNoSeed
1 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