123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package pkg
- import (
- "math/rand"
- "strings"
- "time"
- )
- func RandomSecondDuration(min, max int32) time.Duration {
- tmp := src.Int31n(max-min) + min
- return time.Duration(tmp) * time.Second
- }
- func RandStringBytesMaskImprSrcSB(n int) string {
- sb := strings.Builder{}
- sb.Grow(n)
- // A src.Int63() generates 63 random bits, enough for letterIdxMax characters!
- for i, cache, remain := n-1, src.Int63(), letterIdxMax; i >= 0; {
- if remain == 0 {
- cache, remain = src.Int63(), letterIdxMax
- }
- if idx := int(cache & letterIdxMask); idx < len(letterBytes) {
- sb.WriteByte(letterBytes[idx])
- i--
- }
- cache >>= letterIdxBits
- remain--
- }
- return sb.String()
- }
- var (
- src = rand.New(rand.NewSource(time.Now().UnixNano()))
- )
- const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
- const (
- letterIdxBits = 6 // 6 bits to represent a letter index
- letterIdxMask = 1<<letterIdxBits - 1 // All 1-bits, as many as letterIdxBits
- letterIdxMax = 63 / letterIdxBits // # of letter indices fitting in 63 bits
- )
|