📌  相关文章
📜  随机数 golang - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:42:24.579000             🧑  作者: Mango

随机数 golang - Go 编程语言

在 Go 编程语言中,生成随机数非常容易。Go 标准库内置了生成伪随机数的函数,可以用来生成各种类型的随机数。本文将介绍如何使用 Go 语言生成随机数。

生成整数随机数

Go 标准库中有一个 math/rand 包,它包含了生成随机数的函数。要生成一个整数随机数,可以调用 rand.Intn() 函数。这个函数接受一个整数参数 n,它将返回一个 [0, n) 范围内的随机整数。下面是一个例子:

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    // 生成一个 [0, 100) 范围内的随机整数
    randomNumber := rand.Intn(100)
    fmt.Println(randomNumber)
}

输出的随机数将在 0 到 99 之间。

生成浮点数随机数

要生成浮点数随机数,可以使用 rand.Float64()函数。这个函数将返回一个 [0.0, 1.0) 范围内的随机浮点数。如果需要生成其他的范围,可以对生成的数进行乘法和加法运算。下面是一个例子:

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    // 生成一个 [0.0, 1.0) 范围内的随机浮点数
    randomNumber := rand.Float64()
    fmt.Println(randomNumber)

    // 生成一个 [0.0, 10.0) 范围内的随机浮点数
    randomNumber = rand.Float64() * 10
    fmt.Println(randomNumber)

    // 生成一个 [-5.0, 5.0) 范围内的随机浮点数
    randomNumber = rand.Float64()*10 - 5
    fmt.Println(randomNumber)
}

输出的随机数将在对应的范围内。

生成随机数种子

上面介绍的函数生成的随机数都是伪随机数,也就是说它们是根据一个叫做随机数种子的值计算得出的。如果每次程序运行时使用相同的随机数种子,这些函数将会生成相同的随机数序列。因此,为了生成不同的随机数序列,需要为每次运行生成不同的随机数种子。可以使用 rand.Seed() 函数来设置随机数种子。下面是一个例子:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    // 生成一个随机数种子
    rand.Seed(time.Now().UnixNano())

    // 生成一个 [0, 100) 范围内的随机整数
    randomNumber := rand.Intn(100)
    fmt.Println(randomNumber)

    // 等待一段时间再生成随机数种子
    time.Sleep(100 * time.Millisecond)
    rand.Seed(time.Now().UnixNano())

    // 再次生成一个 [0, 100) 范围内的随机整数
    randomNumber = rand.Intn(100)
    fmt.Println(randomNumber)
}

上面的代码在第一次调用 rand.Seed() 时使用了当前时间的纳秒值作为随机数种子,然后生成了一个随机整数。在等待了一段时间之后,又调用了 rand.Seed() 来生成另一个随机数种子,然后再次生成了一个随机整数。这样就可以让每次程序运行生成不同的随机数序列了。

总结

在 Go 编程语言中,使用 rand 包可以轻松生成各种类型的随机数。需要注意的是,为了生成不同的随机数序列,需要为每次运行生成不同的随机数种子。可以使用 time 包来获取当前时间,然后使用 time.Now().UnixNano() 获取当前时间的纳秒值作为随机数种子。