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)) }
~~~