Go语言基础之rand(随机数)包
在Golang中,有两个包提供了rand,分别为 "math/rand" 和 "crypto/rand", 对应两种应用场景。
"math/rand" 包实现了伪随机数生成器。也就是生成 整形和浮点型。
该包中根据生成伪随机数是是否有种子(可以理解为初始化伪随机数),可以分为两类:
1、有种子。通常以时钟,输入输出等特殊节点作为参数,初始化。该类型生成的随机数相比无种子时重复概率较低。
2、无种子。可以理解为此时种子为1, Seek(1)。 // 如果无种子编译后运行的结果是定值
package main
import (
"fmt"
"math/rand"
"time"
) func main() {
for i := 0; i < 10; i++ {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
fmt.Printf("%d ", r.Int31())
} fmt.Println("")
for i := 0; i < 10; i++ {
fmt.Printf("%d ", rand.Int31())
}
} // 输出
490307279 1883158150 444844955 1515267566 332588293 405951414 174061166 311302046 1235903925 2086504713
1298498081 2019727887 1427131847 939984059 911902081 1474941318 140954425 336122540 208240456 646203300
常用的方法有:(以有种子的为例,无种子的直接通过 rand 报名调用对应的方法)
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
拓展:对于需要随机指定位数的,当位数不够是,可以通过前边补0达到长度一致,如:
package main
import (
"fmt"
"math/rand"
)
func main() { // 随机产生4位长度伪随机数
for i := 0; i < 10; i++ {
fmt.Printf("%.4d ", rand.Int31()%10000)
}
}
// 输出 8081 7887 1847 4059 2081 1318 4425 2540 0456 3300
”crypto/rand“ 包实现了用于加解密的更安全的随机数生成器。
该包中常用的是 func Read(b []byte) (n int, err error) 这个方法, 将随机的byte值填充到b 数组中,以供b使用。示例如下
package main
import (
"crypto/rand"
"fmt"
)
func main() {
b := make([]byte, 20)
fmt.Println(b) // _, err := rand.Read(b)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(b)
} // 输出
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[148 86 239 131 106 181 189 38 149 255 35 121 215 135 150 158 67 39 167 107]
Go语言基础之rand(随机数)包的更多相关文章
- Go语言基础之包
Go语言基础之包 在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的.本文介绍了Go语言中如何定义包.如何导出包的内容及如何导入其他包. Go语言的包(packag ...
- Go语言基础之time包
Go语言基础之time包 时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法. Go语言中导入包 Go语言中使用import关键字导入包,包的名字使用双引号(”)包裹 ...
- Go语言基础包之net/http
Go语言基础包之net/http Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现. net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的 ...
- GO学习-(15) Go语言基础之包
Go语言基础之包 在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的.本文介绍了Go语言中如何定义包.如何导出包的内容及如何导入其他包. Go语言的包(packag ...
- [06 Go语言基础-包]
[06 Go语言基础-包] 包 什么是包,为什么使用包? 到目前为止,我们看到的 Go 程序都只有一个文件,文件里包含一个 main 函数和几个其他的函数.在实际中,这种把所有源代码编写在一个文件的方 ...
- Go 语言控制台输入&生成随机数
Go 语言控制台输入&生成随机数 1. 不同基础类型之间的转化对于不同的基础类型之间的转化,Go 提供了 strconv包.它实现了字符串与其他基本数据类型之间的转化.其中最常用的数值转化函数 ...
- Redis源代码分析(23)--- CRC循环冗余算法RAND随机数的算法
他今天就开始学习Redis源代码的一些工具来实现,在任何一种语言工具.算法实现的原理应该是相同的,一些比較经典的算法.比方说我今天看的Crc循环冗余校验算法和rand随机数产生算法. CRC算法全称循 ...
- D05——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime ...
- Go语言基础练习题系列2
1.练习1 生成一个随机数,让一个用户去猜这个数是多少? 代码示例如下: package main import ( "fmt" "math/rand" //m ...
随机推荐
- root xshell登陆Ubuntu
https://www.jianshu.com/p/c8ee39488d2a xshell测试非root用户,可以正常连接,但是root用户仍旧无法访问 解决方法:修改 /etc/ssh/sshd_c ...
- 2、Spring-RootApplicationContext-refresh
上一篇文中提到父容器root applicationContext最后是调用XmlWebApplicationContext去实现的, 但是什么时候开始解析标签(默认标签.自定义标签).注册bean以 ...
- leetcode 869. Reordered Power of 2
function reorderedPowerOf2(N) { var a1 = N.toString().split('') a1.sort((a, b) => a.localeCompare ...
- mysql数据库事务的操作与理解
--------------------事务----------------------------------------------查询mysql事务隔离级别1.查看当前会话隔离级别select ...
- 进程间通讯IPC的几种方式总结
Linux进程间的通讯 Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同.前者对Unix早期的进程间通信 ...
- 「题解」「CF1019B」The hat
目录 题目 背景 程序输出 交互程序输入 题解 程序 题目 背景 这是一道交互题. 一共有 \(n\) 个人做成一圈,他们的编号从 \(1\) 到 \(n\). 现在每个人的手里面都有一个数字 \(a ...
- 洛谷P1433 吃奶酪
#include<iostream> #include<math.h> using namespace std ; ; int n; bool st[N]; double x[ ...
- codeforces Codeforces Round #597 (Div. 2) B. Restricted RPS 暴力模拟
#include <bits/stdc++.h> using namespace std; typedef long long ll; ]; ]; int main() { int t; ...
- 每天进步一点点------ORCAD Capture CIS 快捷键
ORCAD Capture CIS 快捷键 I: 放大O: 缩小C: 以光标所指为新的窗口显示中心 W: 画线On/OffP: 快速放置元件R: 元件旋转90°H: 元件 ...
- Linux 中查看可用的网络接口
目录 Linux 中查看可用的网络接口 在 Linux 中找到可用的网络接口 title: Linux 中查看可用的网络接口 date: 2020/2/25 16:56:36 toc: true -- ...