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.

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    // Definohet gjatesia e deshiruar e stringut
    length := 10

    // Caktohet stringu me te gjitha karakteret e lejuara
    // ne stringun e rastesishem
    const set = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

    // Lexohet koha aktuale e sistemit ne forme te nanosekondave
    var nanosec int64 = time.Now().UnixNano()

    // Gjeneratorit te numrit pseudo te rastesishem i jepet ai numer si seed
    var src = rand.NewSource(nanosec)

    // Definohet nje byte slice per karakteret qe do te zgjedhen nga karakter set,
    // aq elemente sa eshte gjatesia e deshiruar e stringut
    b := make([]byte, length)

    var c int64
    // Cikli perseritet aq here sa eshte gjatesia e deshiruar e stringut
    for i := range b {
        // Numri i rastesishem c eshte integer i madh (64 bits)
        c = src.Int63()
        fmt.Printf("Numri i rastesishem: %v \n", c)

        // Per te mos qene jashte vlerave 0-61, sepse gjatesia e karakter setit eshte 62
        // behet modulus me 62, pra numrin e karaktereve te karakter setit
        d := c % int64(len(set))
        fmt.Printf("Modulusi me 62: %v \n", d)

        // Nga karakter seti merret karakteri nga pozita qe tregon d dhe vendoset
        // si vlere e anetarit vijues te byte slice
        fmt.Printf("Merre karakterin nga pozita %v qe eshte: %v \n", d, string(set[d]))
        b[i] = set[d]
    }

    fmt.Printf("Stringu i rastesishem: %v", string(b))
}

https://play.golang.org/p/IAjuawbb-Cf

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.

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    fmt.Println(randString(15))
}

func randString(length int) string {
    const set = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    var nanosec int64 = time.Now().UnixNano()
    var src = rand.NewSource(nanosec)
    b := make([]byte, length)
    var c int64
    for i := range b {
        c = src.Int63()
        d := c % int64(len(set))
        b[i] = set[d]
    }

    return string(b)
}

https://play.golang.org/p/5FsV-l1_dyJ

Rezultati:

aJFLa7XPH59kWSX
All Rights Reserved Theme by 404 THEME.