go_dreamfactory/stress/robot/randomStr.go
2022-12-01 15:41:50 +08:00

57 lines
1.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package robot
import (
"encoding/hex"
"math/rand"
"testing"
"time"
)
// 长度为62
var nbytes []byte = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890")
func init() {
// 保证每次生成的随机数不一样
rand.Seed(time.Now().UnixNano())
}
// 方法一
func (r *Robot) RandStr1(n int) string {
result := make([]byte, n)
for i := 0; i < n; i++ {
result[i] = nbytes[rand.Int31()%62]
}
return string(result)
}
// 方法二
func (r *Robot) RandStr2(n int) string {
result := make([]byte, n/2)
rand.Read(result)
return hex.EncodeToString(result)
}
// 对比一下两种方法的性能
func (r *Robot) Benchmark1(b *testing.B) {
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
r.RandStr1(12)
}
})
// 结果539.1 ns/op
}
func (r *Robot) Benchmark2(b *testing.B) {
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
r.RandStr2(12)
}
})
// 结果: 157.2 ns/op
}
// func TestOne(t *testing.T) {
// fmt.Println("方法一生成12位随机字符串: ", RandStr1(12))
// fmt.Println("方法二生成12位随机字符串: ", RandStr2(12))
// }