golang 随机数的两种方式

作者:@航空母舰 时间:2024-04-28 10:46:44 

golang支持两种随机数生成方式:

  • math/rand          // 伪随机

  • crypto/rand        // 真随机

math/rand伪随机生成的数字是确定的,不论在什么机器、什么时间,只要执行的随机代码一样,那么生成的随机数就一样。为了尽量随机性,那么我们可以每次使用不同的seed来启动程序,就可以保证每次启动都产生新的随机数,聪明的你肯定想到了使用时间戳

func main() {
   fmt.Println(rand.Intn(100))
   //设置随机数种子,由于种子数值,每次启动都不一样
   //所以每次随机数都是随机的
   rand.Seed(time.Now().UnixNano())
   //随机生成100以内的正整数
   fmt.Println(rand.Intn(100))
}

crypto/rand 就是从这个地方读“真随机”数字返回,但性能比较慢。比上面慢10倍以上

package main

import (
   "crypto/rand"
   "encoding/binary"
   "fmt"
   "time"
)

func main() {
   var n int32
   binary.Read(rand.Reader, binary.LittleEndian, &n)
   fmt.Println(n)
}

通用随机数算法

package main

import (
   "fmt"
   "math/rand"
   "time"
)

func main() {
   fmt.Println(randomString(6, 0))
}

/**
* size 随机码的位数
* kind 0    // 纯数字
      1    // 小写字母
      2    // 大写字母
      3    // 数字、大小写字母
*/
func randomString(size int, kind int) string {
   ikind, kinds, rsbytes := kind, [][]int{[]int{10, 48}, []int{26, 97}, []int{26, 65}}, make([]byte, size)
   isAll := kind > 2 || kind < 0
   rand.Seed(time.Now().UnixNano())
   for i := 0; i < size; i++ {
       if isAll { // random ikind
           ikind = rand.Intn(3)
       }
       scope, base := kinds[ikind][0], kinds[ikind][1]
       rsbytes[i] = uint8(base + rand.Intn(scope))
   }
   return string(rsbytes)
}

来源:https://blog.csdn.net/hudeyong926/article/details/124857119

标签:golang,随机数
0
投稿

猜你喜欢

  • 微信小程序开发之数据存储 参数传递 数据缓存

    2024-04-19 09:49:44
  • python为什么要安装到c盘

    2023-01-04 13:23:00
  • js计算精度问题小结

    2024-04-10 13:55:24
  • python中pip的安装与使用教程

    2021-06-10 23:37:36
  • 用Python实现服务器中只重载被修改的进程的方法

    2022-06-21 05:11:38
  • 详解Django 时间与时区设置问题

    2021-02-19 03:08:42
  • ASP也使用ORM,给ASP上所有的SQL注入画上句号

    2011-04-03 11:02:00
  • 一文搞懂Python中subprocess模块的使用

    2023-12-05 16:35:05
  • MySql多表查询 事务及DCL

    2024-01-29 04:55:28
  • 解决pycharm同一目录下无法import其他文件

    2021-03-22 10:02:14
  • python实现字符串和日期相互转换的方法

    2022-09-02 04:05:55
  • python 工具类之Queue组件详解用法

    2023-08-05 23:59:10
  • 10分钟用Python快速搭建全文搜索引擎详解流程

    2023-11-06 16:13:41
  • 让你的空间支持域名绑定子目录的解决办法

    2010-09-15 10:03:00
  • Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解

    2022-03-26 10:52:57
  • 详解Django中CSRF和CORS的区别

    2021-02-19 19:16:51
  • 小谈访客浏览器分辨率

    2007-10-18 13:12:00
  • Python如何把多个PDF文件合并代码实例

    2021-03-27 00:31:15
  • TensorFlow神经网络创建多层感知机MNIST数据集

    2022-03-29 20:09:19
  • PHP制作图形验证码代码分享

    2024-05-11 09:26:01
  • asp之家 网络编程 m.aspxhome.com