教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 高性能 golang 生成指定长度随机字符串

高性能 golang 生成指定长度随机字符串

发布时间:2022-03-25   编辑:jiaochengji.com
教程集为您提供高性能 golang 生成指定长度随机字符串等资源,欢迎您收藏本站,我们将为您提供最新的高性能 golang 生成指定长度随机字符串资源

先直接贴代码吧。

<pre><code class="language-Go">package main import ( "math/rand" "time" ) var letters = []byte("abcdefghjkmnpqrstuvwxyz123456789") var longLetters = []byte("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ=_") func init() { rand.Seed(time.Now().Unix()) } // RandLow 随机字符串,包含 1~9 和 a~z - [i,l,o] func RandLow(n int) []byte { if n <= 0 { return []byte{} } b := make([]byte, n) arc := uint8(0) if _, err := rand.Read(b[:]); err != nil { return []byte{} } for i, x := range b { arc = x & 31 b[i] = letters[arc] } return b } // RandUp 随机字符串,包含 英文字母和数字附加=_两个符号 func RandUp(n int) []byte { if n <= 0 { return []byte{} } b := make([]byte, n) arc := uint8(0) if _, err := rand.Read(b[:]); err != nil { return []byte{} } for i, x := range b { arc = x & 63 b[i] = longLetters[arc] } return b } // RandHex 生成16进制格式的随机字符串 func RandHex(n int) []byte { if n <= 0 { return []byte{} } var need int if n & 1 == 0 { // even need = n } else { // odd need = n 1 } size := need / 2 dst := make([]byte, need) src := dst[size:] if _, err := rand.Read(src[:]); err != nil { return []byte{} } hex.Encode(dst, src) return dst[:n] }</code></pre>

现在来解释一下。网上很多代码生成随机字符串的方法,反复调用 <span style="color:#86ca5e;">rand </span>随机函数。实际上。<span style="color:#86ca5e;">rand </span>的随机函数本身也是调用的系统函数,开销根据操作系统而定。应尽量少调用。本系列方法思路是,一次随机出足够多的数据,然后挨个填充。

比如,需要生成长度为 n 的字符串,我就直接使用 <span style="color:#86ca5e;">make </span>申请足够空间 <span style="color:#86ca5e;">b := make([]byte, n)</span>, 然后使用 <span style="color:#86ca5e;">rand.Read(b[:]) </span>将此空间填满,本来这算是可以了,但是由于 b 中包含各种奇奇怪怪的字符,我们需要控制一下输出内容。因此可以根据随机生成的内容,再挨个替换掉。<span style="color:#86ca5e;">b[i] = letters[arc]</span> 就是负责内容替换的。<span style="color:#86ca5e;">x</span> 是原先随机生成的 byte 内容,对应的10进制范围是 0-255。不过我们需要生成的字符个数,只要 32 或者 64 个,因此我们需要对 x 转化到 32 或者 64 以下的值,最快就是进行 <span style="color:#86ca5e;">&</span> 或者 <span style="color:#86ca5e;">^</span> 运算。到底选用哪个都无所谓。这样我们就快速地替换了随机内容。

如果是只生成0-9 a-f 内容的随机字符串,那就容易了。如这里的 <span style="color:#86ca5e;">RanHex </span>方法

到此这篇关于“高性能 golang 生成指定长度随机字符串”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
php生成指定位数(长度)的随机字符串
高性能 golang 生成指定长度随机字符串
php生成随机字符串(自定义纯数字、纯字母或数字字母混合)
php生成随机字符串(可指定纯数字、纯字母)
php生成随机数的例子
php生成随机字符串的函数
golang随机数
php生成自定义长度随机字符串的函数
php随机密码生成的自定义函数
php生成N个不重复的随机数

[关闭]
~ ~