孟斌

在 Go 语言中,math/rand 和 crypto/rand 都是用于生成随机数的包,但它们的用途和特性有显著的不同。

1. math/rand

import (
      "math/rand"
      "time"
  )

  func main() {
      r := rand.New(rand.NewSource(time.Now().UnixNano())) // 使用当前时间作为种子
      number := r.Intn(100) // 生成 0 到 99 之间的随机整数
  }

2. 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
随机数生成类型 伪随机数生成器 加密安全随机数生成器
适用场景 模拟、游戏、非安全用途 加密、密钥生成、安全用途
可预测性 可预测(种子已知时) 不可预测
初始化方式 必须使用种子 不需要种子,自动使用系统熵
性能 通常更快 生成速度较慢(因考虑安全性)

结论


孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特