每日一个 Golang Packages 06/13 math.rand

2020/06/11

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 协议》,转载必须注明作者和本文链接
微信搜索:上帝喜爱笨人
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!