在 Go 语言中,math/rand
和 crypto/rand
都是用于生成随机数的包,但它们的用途和特性有显著的不同。
math/rand
import (
"math/rand"
"time"
)
func main() {
r := rand.New(rand.NewSource(time.Now().UnixNano())) // 使用当前时间作为种子
number := r.Intn(100) // 生成 0 到 99 之间的随机整数
}
crypto/rand
import (
"crypto/rand"
"math/big"
)
func main() {
max := big.NewInt(100) // 生成 0 到 99 之间的随机数
n, err := rand.Int(rand.Reader, max)
if err != nil {
// 处理错误
}
// n 是 0 到 99 之间的随机整数
}
特性 |
|
|
---|---|---|
随机数生成类型 | 伪随机数生成器 | 加密安全随机数生成器 |
适用场景 | 模拟、游戏、非安全用途 | 加密、密钥生成、安全用途 |
可预测性 | 可预测(种子已知时) | 不可预测 |
初始化方式 | 必须使用种子 | 不需要种子,自动使用系统熵 |
性能 | 通常更快 | 生成速度较慢(因考虑安全性) |
math/rand
。crypto/rand
。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。