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