一、介绍
让咱们用 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