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