快速产生一个随机字符串
https://colobu.com/2018/09/02/generate-random-string-in-Go/
牛,涨见识了
const ( FormatDateTime = "2006-01-02 15:04:05"
// FmtyyyyMMdd 年月日
FmtyyyyMMdd = "20060102"
chars = "0123456789_abcdefghijkl-mnopqrstuvwxyz" //ABCDEFGHIJKLMNOPQRSTUVWXYZ
charsLen = len(chars)
mask = 1<<6 - 1
)
var rng = rand.NewSource(time.Now().UnixNano())
// RandStr 返回指定长度的随机字符串 func RandStr(ln int) string { /* chars 38个字符 * rng.Int63() 每次产出64bit的随机数,每次我们使用6bit(2^6=64) 可以使用10次 */ buf := make([]byte, ln) for idx, cache, remain := ln, rng.Int63(), 10; idx > 0; { if remain == 0 { cache, remain = rng.Int63(), 10 } buf[idx-1] = chars[int(cache&mask)%charsLen] cache >>= 6 remain-- idx-- } return *(*string)(unsafe.Pointer(&buf)) }
BenchmarkRandStr16-8 20000000 72.0 ns/op 16 B/op 1 allocs/op
const ( FormatDateTime = "2006-01-02 15:04:05"
// FmtyyyyMMdd 年月日
FmtyyyyMMdd = "20060102"
chars = "0123456789_abcdefghijkl-mnopqrstuvwxyz" //ABCDEFGHIJKLMNOPQRSTUVWXYZ
charsLen = len(chars)
mask = 1<<6 - 1
)
var rng = rand.NewSource(time.Now().UnixNano())
// RandStr 返回指定长度的随机字符串 func RandStr(ln int) string { /* chars 38个字符 * rng.Int63() 每次产出64bit的随机数,每次我们使用6bit(2^6=64) 可以使用10次 */ buf := make([]byte, ln) for idx, cache, remain := ln-1, rng.Int63(), 10; idx >= 0; { if remain == 0 { cache, remain = rng.Int63(), 10 } buf[idx] = chars[int(cache&mask)%charsLen] cache >>= 6 remain-- idx-- } return *(*string)(unsafe.Pointer(&buf)) }
BenchmarkRandStr16-8 20000000 68.1 ns/op 16 B/op 1 allocs/op
const (
letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
letterIdxMask = 1<<6 - 1 // All 1-bits, as many as 6
)
var src = rand.NewSource(time.Now().UnixNano())
func RandStringBytesMaskImprSrc(n int) string {
b := make([]byte, n)
// A src.Int63() generates 63 random bits, enough for 10 characters!
for i, cache, remain := n-1, src.Int63(), 10; i >= 0; {
if remain == 0 {
cache, remain = src.Int63(), 10
}
b[i] = letterBytes[int(cache & letterIdxMask)%len(letterBytes)]
i--
cache >>= 6
remain--
}
return *(*string)(unsafe.Pointer(&b))
}
https://stackoverflow.com/questions/22892120/how-to-generate-a-random-string-of-a-fixed-length-in-go/22892986#22892986
原答案
rajaburma88 Welcome to the trusted website