📅  最后修改于: 2023-12-03 15:42:24.579000             🧑  作者: Mango
在 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() 获取当前时间的纳秒值作为随机数种子。