...
1 package cmdline
2
3 import (
4 "math/rand"
5 "time"
6 )
7
8 var (
9 randsrc = rand.New(rand.NewSource(time.Now().UnixNano()))
10 )
11
12
13 func RandomString(n int) string {
14 const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
15 const (
16 letterIdxBits = 6
17 letterIdxMask = 1<<letterIdxBits - 1
18 letterIdxMax = 63 / letterIdxBits
19
20 )
21
22 b := make([]byte, n)
23
24 for i, cache, remain := n-1, randsrc.Int63(), letterIdxMax; i >= 0; {
25 if remain == 0 {
26 cache, remain = randsrc.Int63(), letterIdxMax
27 }
28 if idx := int(cache & letterIdxMask); idx < len(letterBytes) {
29 b[i] = letterBytes[idx]
30 i--
31 }
32 cache >>= letterIdxBits
33 remain--
34 }
35
36 return string(b)
37 }
38
View as plain text