package rand // https://www.calhoun.io/creating-random-strings-in-go/ import ( "math/rand" "sync" "time" ) const ( CharsetLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" CharsetNumbers = "1234567890" CharsetSymbols = "#@+*%&/<>[]()=?!$.,:;-_" CharsetAlphanumeric = CharsetLetters + CharsetNumbers CharsetAll = CharsetLetters + CharsetNumbers + CharsetSymbols ) var seededRand *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano())) var lock sync.Mutex func StringWithCharset(length int, charset string) string { b := BytesWithCharset(length, charset) return string(b) } func BytesWithCharset(length int, charset string) []byte { lock.Lock() defer lock.Unlock() b := make([]byte, length) for i := range b { b[i] = charset[seededRand.Intn(len(charset))] } return b } func StringLetters(length int) string { return StringWithCharset(length, CharsetLetters) } func StringNumbers(length int) string { return StringWithCharset(length, CharsetNumbers) } func StringAlphanumeric(length int) string { return StringWithCharset(length, CharsetAlphanumeric) } func String(length int) string { return StringWithCharset(length, CharsetAll) } func Bytes(length int) []byte { return BytesWithCharset(length, CharsetAll) }