Contents

10.25. math-rand

import "math/rand"

“math/rand”包实现了伪随机数生成器,能够生成整型和浮点型的随机数。使用随机数生成器需要放入种子。可以使用Seed()函数生成一个不确定的种子放入随机数生成器,这样每次运行随机数生成器都会生成不同的序列。如果没有在随机数生成器中放入种子,则默认使用具有确定性状态的种子,此时可以理解为种子的值是一个常数1,即Seed(1)。

随机数从资源生成。包水平的函数都使用的默认的公共资源。该资源会在程序每次运行时都产生确定的序列。

如果需要每次运行产生不同的序列,应使用Seed函数进行初始化。默认资源可以安全的用于多go程并发`

rand包实现了伪随机数生成器。

func init() {
    rand.Seed(time.Now().UnixNano()) //使用给定的seed来初始化生成器到一个确定的状态。
}

func main() {
    fmt.Println(rand.Int())     //9153536921449289609(返回一个非负的伪随机int值)
    fmt.Println(rand.Int31())   //2037735069(返回一个int32类型的非负的31位伪随机数)
    fmt.Println(rand.Int63())   //1132646811815532030(返回一个int64类型的非负的63位伪随机数)

    fmt.Println(rand.Intn(100)) //95(取值范围在[0,n)的伪随机int值,n<=0会panic)
    fmt.Println(rand.Float32()) //0.09178123(取值范围在[0.0, 1.0)的伪随机float32值)

    fmt.Println(rand.Perm(5))   //[0 4 1 2 3](有n个元素的,[0,n)范围内整数的伪随机排列的切片)
}