-
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathmain.go
34 lines (30 loc) · 804 Bytes
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Go Unicode random string generator
// 10-Aug-2020
// https://devtidbits.com/2020/08/10/go-unicode-random-string-generator/
package main
import (
"crypto/rand"
"fmt"
"log"
)
const random string = "🥺😂🥰😊😍😊😝🤗abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0987654321 .!?"
func main() {
s, err := randString(20)
if err != nil {
log.Fatal(err)
}
fmt.Println(s)
}
func randString(n int) (string, error) {
s, r := make([]rune, n), []rune(random)
for i := range s {
p, err := rand.Prime(rand.Reader, len(r))
if err != nil {
return "", fmt.Errorf("random string n %d: %w", n, err)
}
x, y := p.Uint64(), uint64(len(r))
// fmt.Printf("x: %d y: %d\tx %% y = %d\trandom[%d] = %q\n", x, y, x%y, x%y, string(r[x%y]))
s[i] = r[x%y]
}
return string(s), nil
}