1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
945 B
Go

package random
import (
"math/rand"
"strings"
"sync"
"time"
)
var r *rand.Rand
var mu sync.Mutex
func init() {
r = rand.New(rand.NewSource(time.Now().UnixNano()))
}
// String returns a random string, 20 characters long.
func String() string {
mu.Lock()
defer mu.Unlock()
var output strings.Builder
chars := "abcdedfghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i := 0; i < 20; i++ {
random := r.Intn(len(chars))
output.WriteString(string(chars[random]))
}
return output.String()
}
// Float64 returns a random float64 between 0 and 1.
func Float64() float64 {
mu.Lock()
defer mu.Unlock()
return r.Float64()
}
// Intn returns a random int >=0 and < n.
func Intn(n int) int {
mu.Lock()
defer mu.Unlock()
return r.Intn(n)
}
// Jitter returns a randomly-chosen duration between d and 2d.
func Jitter(d time.Duration) time.Duration {
mu.Lock()
defer mu.Unlock()
return d + time.Duration(r.Float64()*float64(d))
}