每日一个 Golang Packages 06/13 math.rand
2020/06/11
- 今日记忆一下 Package math/rand 随机数生成器
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
/**
官方介绍
随机数由源生成。顶级函数。
例如 Float64和 Int,使用默认的共享 Source,它在每次运行程序时生成确定的值序列。
如果每次运行需要不同的行为,则使用 Seed 函数初始化默认 Source。
默认 Source 对于多个 goroutine 并发使用是安全的,但 NewSource 创建的 Sources 则不是。
*/
//Seed 使用提供的种子值将默认的 Source 初始化为确定性状态。
//如果不调用Seed,生成器的行为就像被Seed(1)播种一样。种子值在除以2³¹-1时有相同的余数,会产生相同的伪随机序列。
// Seed与Rand.Seed方法不同,并发使用是安全的
rand.Seed(time.Now().Unix())
// 非负的 int 随机值,返回值为int
fmt.Println(rand.Int()) // 8118193344438388970
// [0,100)的随机值,返回值为int
fmt.Println(rand.Intn(100)) // 58
// 非负的伪随机31位整数,返回值为 int32
fmt.Println(rand.Int31()) // 1430627247
// [0,10)的随机值,返回值为 int32 [0,n ]
fmt.Println(rand.Int31n(10)) // 5
// 32位float随机值,返回值为 float32 [0.0,1.0]
fmt.Println(rand.Float32()) // 0.5671139
// 64位float随机值,返回值为 float64 [0.0,1.0]
fmt.Println(rand.Float64()) // 0.6571823688532759
// 如果要产生负数到正数的随机值,只需要将生成的随机数减去相应数值即可 [-5, 5)的随机值
fmt.Println(rand.Intn(5) - 5) // 2
// Rand 也可以使用对象的方式
R := rand.New(rand.NewSource(time.Now().Unix()))
// [0,10)的随机值,返回值为int
fmt.Println(R.Intn(10))
// [0,10)的随机值,返回值为int32
fmt.Println(R.Int31n(10))
// 32位 float 随机值,返回值为float32
fmt.Println(R.Float32())
// 64位 float 随机值,返回值为float64
fmt.Println(R.Float64())
// [-5, 5)的随机值
fmt.Println(R.Intn(5) - 5)
}
顺便佛系一下用 go 做做 leetcode 的练习题同步到了 GitHub 大家也可以看看。
一步一个脚印,稳扎稳打,重新出发!从基本的 Golang Packages 记忆开始,坚持 ing!
本作品采用《CC 协议》,转载必须注明作者和本文链接