类似于[a-zA-Z0-9]字符串:
na1dopW129T0anN28udaZ
或十六进制字符串:
8c6f78ac23b4a7b8c0182d
长期以来,我的意思是2K和更多字符。
这在我的盒子上大约有200MBps。有明显的改进空间。
type randomDataMaker struct {
src rand.Source
}
func (r *randomDataMaker) Read(p []byte) (n int, err error) {
for i := range p {
p[i] = byte(r.src.Int63() & 0xff)
}
return len(p), nil
}
您只io.CopyN
需要生成所需的字符串即可。显然,您可以在途中或其他情况下调整字符集。
这个模型的好处是,它只是一个,io.Reader
因此您可以使用它制作任何东西。
测试如下:
func BenchmarkRandomDataMaker(b *testing.B) {
randomSrc := randomDataMaker{rand.NewSource(1028890720402726901)}
for i := 0; i < b.N; i++ {
b.SetBytes(int64(i))
_, err := io.CopyN(ioutil.Discard, &randomSrc, int64(i))
if err != nil {
b.Fatalf("Error copying at %v: %v", i, err)
}
}
}
在我的2.2GHz i7的一个核心上:
BenchmarkRandomDataMaker 50000 246512 ns/op 202.83 MB/s
编辑
自从编写基准测试以来,我认为我会做一些明显的改进(减少对随机性的呼唤)。使用rand的1/8调用,它的运行速度快了大约4倍,尽管这是一个很大的丑陋之处:
新版本:
func (r *randomDataMaker) Read(p []byte) (n int, err error) {
todo := len(p)
offset := 0
for {
val := int64(r.src.Int63())
for i := 0; i < 8; i++ {
p[offset] = byte(val & 0xff)
todo--
if todo == 0 {
return len(p), nil
}
offset++
val >>= 8
}
}
panic("unreachable")
}
新基准:
BenchmarkRandomDataMaker 200000 251148 ns/op 796.34 MB/s
编辑2
因为它是多余的,所以在强制转换为字节时使用了掩码。更快地得到了很多:
BenchmarkRandomDataMaker 200000 231843 ns/op 862.64 MB/s
(这是这么多比真正的工作更容易 叹息 )
编辑3
这是今天在irc中提出的,所以我发布了一个库。另外,我的实际基准测试工具虽然对相对速度有用,但其报告不够准确。
我创建了randbo,您可以在需要它们的地方重复使用它们以产生随机流。
问题内容: 对于一个项目,我需要一种创建数千个随机字符串同时保持较低冲突的方法。我正在寻找长度只有12个字符且只有大写的字符。有什么建议? 问题答案: 码: 输出: 5个例子: 编辑: 如果你只需要数字,使用恒定的,而不是从一个模块。 3个例子:
问题内容: 在Go语言中,我只需要一个随机的字符串(大写或小写),没有数字。最快和最简单的方法是什么? 问题答案: Paul的解决方案提供了一个 简单的 通用解决方案。 问题要求 “最快,最简单的方法” 。让我们也讨论 最快的 部分。我们将以迭代的方式得出最终的最快的代码。对每个迭代进行基准测试可以在答案的结尾处找到。 所有解决方案和基准代码都可以在GoPlayground上找到。Playgrou
在Go中,我只想要一个随机的字符串(大写或小写),没有数字。最快和最简单的方法是什么?
本文向大家介绍JavaScript生成随机字符串的方法,包括了JavaScript生成随机字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript生成随机字符串的方法。分享给大家供大家参考。具体分析如下: 这里使用JavaScript生成一个随机字符串,可以指定字符串的长度。 希望本文所述对大家的javascript程序设计有所帮助。
本文向大家介绍在JavaScript中生成指定长度的随机字符串,包括了在JavaScript中生成指定长度的随机字符串的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个JavaScript函数,该函数接受数字n,并返回长度为n的随机字符串,其中不包含26个英文小写字母。 因此,让我们为该函数编写代码- 示例 为此的代码将是- 输出结果 控制台中的输出将为- 注意-这是许多可能的输出之一。控
问题内容: 我想要一个5个字符串,该字符串由从集合中随机选择的字符组成。 用JavaScript做到这一点的最佳方法是什么? 问题答案: 我认为这将为您工作: