1. 介绍
"math/rand"

go语言标准库中内置了处理随机数的方法,位于math包下,程序中通过引入math/rand包,即可调用相应方法生成随机数。
但是标准库中未提供可以生成指定范围的随机数,不过我们通过在原有方法上进行改造,即可实现此功能。

2. 实现

假设现在有这样一个需求,在服务器上创建一个服务需要为其分配相应的端口号,已知目前5000到10000端口未被占用。我们需要生成5000到10000的随机端口号,分配给服务。

首先,我们需要一个随机种子来为生成随机数做准备,可以调用Seed()函数实现, Seed()函数接收一个int64的整型。

rand.Seed(seed int64)

然后,调用生成随机数的方法Int31n(), Int31n()函数接收一个int32类型的数字n, 生成0~n的int32类型的随机数,并将其返回。其余类似Int63n()函数,同理。

rand.Int31(n int32) int32

完整代码

import (
	"fmt"
	"math/rand"
	"time"
)
func main() {
	//创建随机种子
	rand.Seed(time.Now().Unix())

	//生成5000到10000之间的int32类型随机数
	//参数10000减5000保证函数生成的随机数在0到5000区间,
	//生成的随机数再加5000则落在5000到10000区间
	var port int32
	port = rand.Int31n(10000 - 5000) + 5000
	fmt.Printf("随机数: %v\n", port)
}