go rand 创建 伪随机数

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

你可能感兴趣的:(go)