在 Go 语言中,math/rand 和 crypto/rand 都是用于生成随机数的包,但它们的用途和特性有显著的不同。
math/randimport (
"math/rand"
"time"
)
func main() {
r := rand.New(rand.NewSource(time.Now().UnixNano())) // 使用当前时间作为种子
number := r.Intn(100) // 生成 0 到 99 之间的随机整数
}
crypto/randimport (
"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 |
|---|---|---|
| 随机数生成类型 | 伪随机数生成器 | 加密安全随机数生成器 |
| 适用场景 | 模拟、游戏、非安全用途 | 加密、密钥生成、安全用途 |
| 可预测性 | 可预测(种子已知时) | 不可预测 |
| 初始化方式 | 必须使用种子 | 不需要种子,自动使用系统熵 |
| 性能 | 通常更快 | 生成速度较慢(因考虑安全性) |
math/rand。crypto/rand。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特