Shembull: Gjeneratori i stringut të rastësishëm
Të dy shembujt të testohen lokalisht sepse në Playground do të fitohen gjithmonë rezultate të njëjta.
1 package main
2
3 import (
4 "fmt"
5 "math/rand"
6 "time"
7 )
8
9 func main() {
10 // Definohet gjatesia e deshiruar e stringut
11 length := 10
12
13 // Caktohet stringu me te gjitha karakteret e lejuara ne stringun e rastesishem
14 const set = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
15
16 // Lexohet koha aktuale e sistemit ne forme te nanosekondave
17 var nanosec int64 = time.Now().UnixNano()
18
19 // Gjeneratorit te numrit pseudo te rastesishem i jepet ai numer si seed
20 var src = rand.NewSource(nanosec)
21
22 // definohet nje byte slice per karakteret qe do te zgjedhen nga karakter set, aq e\
23 lemente sa eshte gjatesia e deshiruar e stringut
24 b := make([]byte, length)
25
26 var c int64
27 // Cikli perseritet aq here sa eshte gjatesia e deshiruar e stringut
28 for i := range b {
29 // Numri i rastesishem c eshte integer i madh (64 bits)
30 c = src.Int63()
31 fmt.Printf("Numri i rastesishem: %v \n", c)
32
33 // Per te mos qene jashte vlerave 0-61, sepse gjatesia e karakter setit eshte 62 b\
34 ehet modulus me 62, pra numrin e karaktereve te karakter setit
35 d := c % int64(len(set))
36 fmt.Printf("Modulusi me 62: %v \n", d)
37
38 // Nga karakter seti merret karakteri nga pozita qe tregon d dhe vendoset si vlere\
39 e anetarit vijues te byte slice
40 fmt.Printf("Merre karakterin nga pozita %v qe eshte: %v \n", d, string(set[d]))
41 b[i] = set[d]
42 }
43
44 fmt.Printf("Stringu i rastesishem: %v", string(b))
45 }
https://play.golang.org/p/WOR0nDcJrAr
Rezultati:
Numri i rastesishem: 4601851300195147788
Modulusi me 62: 0
Merre karakterin nga pozita 0 qe eshte: a
Numri i rastesishem: 4647152587264684499
Modulusi me 62: 3
Merre karakterin nga pozita 35 qe eshte: J
. . .
Numri i rastesishem: 2086826187330921635
Modulusi me 62: 57
Merre karakterin nga pozita 57 qe eshte: 5
Stringu i rastesishem: aJFLa7XPH5
Detyrë:
Të rishkruhet si funksion.
1 package main
2
3 import (
4 "fmt"
5 "math/rand"
6 "time"
7 )
8
9 func main() {
10 fmt.Println(randString(15))
11 }
12
13 func randString(length int) string {
14 const set = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
15 var nanosec int64 = time.Now().UnixNano()
16 var src = rand.NewSource(nanosec)
17 b := make([]byte, length)
18 var c int64
19 for i := range b {
20 c = src.Int63()
21 d := c % int64(len(set))
22 b[i] = set[d]
23 }
24
25 return string(b)
26 }
https://play.golang.org/p/5FsV-l1_dyJ
Rezultati:
aJFLa7XPH59kWSX