go:math/rand库包

143 阅读2分钟

参考网址

blog.csdn.net/weixin_4267…

简介

import "math/rand"

rand模块的作用是生成随机数,来满足一些代码中的需求。

math/rand模块中的函数有哪些

rand.Seed()

rand.Seed(time.Now().UnixNano())
因为我们都知道,当随机数种子不同的时候,每次产生的随机数也是不同的。
有的时候,我们需要每次产生的随机数都是一样的,有的时候我们需要每次产生的随机数是不一样的。
所以,为了达成我们的这个目的,我们可以指定一个固定的随机数种子。

如果我们需要每次的随机数都是一样的,那么我们固定一个数就行了,比如rand.Seed(100)。
如果我们希望每次产生的随机数都不一样,那么我们每次指定的种子不同就行了。
我们一般都是用时间的纳秒来代替种子。
rand.Seed(time.Now().UnixNano())
package main

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


func test5() {
	// 种子固定
	rand.Seed(1)  // Intn(10) 左闭右开区间 [0,10)
	fmt.Println(rand.Intn(10), rand.Intn(10), rand.Intn(10), rand.Intn(10))
	/*
		第一次执行:1 7 7 9
		第二次执行:1 7 7 9
		第三次执行:1 7 7 9
	*/
}

func test6() {
	// 种子可变
	rand.Seed(time.Now().UnixNano())
	fmt.Println(rand.Intn(10), rand.Intn(10), rand.Intn(10), rand.Intn(10))
	/*
		第一次执行:2 4 3 1
		第二次执行:3 5 8 1
		第三次执行:3 8 1 7
	*/
}

func main() {
	test5()
	test6()
}

rand.Int()

返回⼀个⾮负的伪随机int值。

rand.Intn(n)

例如获取0-n之间的随机数,左闭右开
package main

import "math.rand"
import "fmt"

func main() {
  rand.Seed(123)  // 固定司机数种子,保证每次生成的随机数都是一样的。
  a := rand.Intn(100)  // 在[0,100)之间,生成一个随机的整数
  fmt.Println(a)

}

rand.Float64()

返回⼀个取值范围在[0.0, 1.0)的伪随机float64值。
左开右闭

总结

1.按类型随机类:

func (r *Rand) Int() int
func (r *Rand) Int31() int32
func (r *Rand) Int63() int64
func (r *Rand) Uint32() uint32
func (r *Rand) Float32() float32  // 返回一个取值范围在[0.0, 1.0)的伪随机float32值
func (r *Rand) Float64() float64  // 返回一个取值范围在[0.0, 1.0)的伪随机float64值

2.指定随机范围类:

func (r *Rand) Intn(n int) int
func (r *Rand) Int31n(n int32) int32
func (r *Rand) Int63n(n int64) int64