Golang中如何生成随机数
发表时间: 2024-05-30 09:32
package main //必须有个main包import( "fmt" "math/rand")func main(){ //设置种子, 只需一次 //如果种子参数一样, 每次运行程序产生的随机数都一样 rand.Seed(666) for i := 0; i < 5; i++ { //产生随机数 fmt.Println("rand = ", rand.Int()) //随机很大的数 }}
输出结果:
rand = 4343637058903381868rand = 3769183255805726892rand = 1923662109321608638rand = 1818688891928401469rand = 4144162958715305555
我们发现执行多次(go run), 执行的结果都是一样的。
以当前系统时间作为种子参数
【实例】
package main //必须有个main包import( "fmt" "math/rand" "time")func main(){ //设置种子, 只需一次 //如果种子参数一样, 每次运行程序产生的随机数都一样 rand.Seed(time.Now().UnixNano()) //以当前系统时间作为种子参数 for i := 0; i < 5; i++ { //产生随机数 fmt.Println("rand = ", rand.Int()) //随机很大的数 } }
输出结果:
rand = 3940521889726020146rand = 192168332379482357rand = 4387217183374865907rand = 5065690078239378655rand = 5229197242740660876
限制最大的随机数
func Intn(n int) int
返回一个取值范围在[0,n)的伪随机int值, 如果n<=0会panic。 panic: 返回错误
package main //必须有个main包import( "fmt" "math/rand" "time")func main(){ //设置种子, 只需一次 //如果种子参数一样, 每次运行程序产生的随机数都一样 rand.Seed(time.Now().UnixNano()) //以当前系统时间作为种子参数 for i := 0; i < 5; i++ { //产生随机数 fmt.Println("rand = ", rand.Intn(1000)) //随机很大的数 }}
输出结果:rand = 691rand = 132rand = 979rand = 157rand = 866