Programmazione in Golang: l'uso della libreria math e i metodi e le funzioni Rand, Seed, Time, Rand.Perm, Crypto rand

Programmazione in Golang: l'uso della libreria math e i metodi e le funzioni Rand, Seed, Time, Rand.Perm, Crypto rand

Lezione universitaria su Golang - esame "Programmazione"




Questo programma genera 5 numeri pseudo-casuali. Utilizza un valore seed predefinito (che inizializza il generatore) di 1.
Quindi: il programma genera gli stessi numeri ogni volta. Prova a eseguirlo più volte: ha sempre lo stesso risultato.

Int: questo metodo restituisce un int positivo (non negativo). Non sono possibili valori frazionari o negativi.

Suggerimento: per modificare la serie iniziale di valori restituiti da rand.Int, utilizzare il metodo Seed.

Golang program that uses rand.Int

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    // Loop five times.
    for i := 0; i < 5; i++ {
        // Get random positive integer.
        value := rand.Int()
        fmt.Println(value)
    }
}

Output

5577006791947779410
8674665223082153551
6129484611666145821
4037200794235010051
3916589616287113937

Seed. Questo metodo inizializza la fonte casuale. Quando utilizziamo un seed in base all'ora corrente, l'esecuzione di ciascun programma inizierà con una sequenza casuale diversa.
Qui: Utilizziamo i nanosecondi attuali del tempo. Abbiamo lanciato questo su un int64 per eseguire il seeding del generatore di numeri.

Time
Nota: se si esegue questo programma più volte, ogni esecuzione stamperà un numero casuale diverso.

Golang program that uses Seed

package main

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

func main() {
    // Call Seed, using current nanoseconds.
    rand.Seed(int64(time.Now().Nanosecond()))
    // Random int will be different each program execution.
    value := rand.Int()
    fmt.Println(value)
}

Output

6912970929678809162

Rand.Perm. Questa funzione è utile Genera sezioni di Ints con valori compresi tra 0 e l'indice massimo della sezione. Ogni valore appare solo una volta. Quindi crea permutazioni di Ints.
Qui: chiamiamo rand.Perm con un argomento di 5. Quindi i numeri 0, 1, 2, 3 e 4 sono disposti casualmente in sezioni di 5 elementi.

Importante: Perm utilizza l'origine casuale predefinita. Quindi dovremmo usare Seed per evitare lo stesso output ad ogni esecuzione del programma.

Golang program that uses rand.Perm

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    for i := 0; i < 5; i++ {
        // Use rand.Perm to generate a random array of numbers.
        numbers := rand.Perm(5)
        fmt.Println(numbers)
    }
}

Output

[0 4 2 3 1]
[4 1 2 0 3]
[2 3 0 4 1]
[0 4 2 1 3]
[1 0 4 2 3]

Crypto rand. I numeri casuali sono disponibili in vari livelli di casualità. Per i migliori numeri casuali integrati in Go, dovremmo usare crypto rand. Dobbiamo usare il pacchetto "math / big".
Programma: Chiamiamo il metodo rand.Int in "crypto / rand" 20 volte. Otteniamo valori compresi tra 0 e 99 inclusi (non ne otteniamo mai 100).

Golang program that uses crypto rand

package main

import (
    "crypto/rand"
    "math/big"
    "fmt"
)

func main() {
    // Generate 20 random numbers with exclusive max of 100.
    // ... So max value returned is 99.
    //     All values returned are 0 or greater as well.
    for i := 0; i < 20; i++ {
        result, _ := rand.Int(rand.Reader, big.NewInt(100))
        fmt.Println(result)
    }
}

Output

54
77
56
21
56
81
55
16
57
88
95
58
12
74
23
35
72
29
25
68

fonte: https://www.dotnetperls.com/rand-go

Paolo Latella

Commenti