I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

La generazione di numeri casuali è importante per molte attività. Questi includono lo sviluppo di giochi, la crittografia e l'analisi dei dati. I valori casuali consentono risultati distinti con un elemento di variabilità e imprevedibilità.

Go fornisce due pacchetti per generare valori casuali nella libreria standard: matematica/rand E cripto/rand. IL matematica/rand pacchetto è principalmente per operazioni matematiche. IL cripto/rand package gestisce operazioni crittograficamente sicure.

I pacchetti rand

IL matematica/rand pacchetto fornisce un metodo flessibile per generazione di numeri casuali. Implementa una varietà di generazioni di numeri pseudo-casuali. Il pacchetto può generare un numero casuale con diverse distribuzioni e utilizzare semi per controllare la sequenza casuale. Può anche generare numeri casuali contemporaneamente o in parallelo.

instagram viewer

IL cripto/rand package implementa un generatore di numeri casuali crittograficamente sicuro. Include funzionalità per generare numeri primi casuali con alta probabilità.

Poiché questi pacchetti hanno lo stesso nome, dovrai utilizzare gli alias se desideri utilizzarli entrambi in un singolo programma, ad esempio:

importare (
crand "cripto/rand"
mrand "matematica / rand"
)

Generazione di numeri interi casuali in Go

Puoi usare il matematica/randInt funzione per generare numeri casuali in un intervallo.

importare (
"fmt"
"matematica / rand"
"tempo"
)

funzprincipale() {
rand. seme (tempo. Adesso().UnixNano())

// Intn genera un numero intero casuale compreso tra 0 e 100
// (esclusi 100)
randomInt := rand. Int(100)

fmt. Println (randomInt)
}

Questo codice passa l'ora corrente al file Seme funzione. Inizializza il generatore di numeri casuali predefinito per la pseudo-casualità.

IL Int La funzione del pacchetto rand genera un numero casuale compreso in un intervallo specificato, in questo caso da 0 a 100.

Genera numeri in virgola mobile casuali

È possibile generare numeri in virgola mobile casuali con il file Galleggiante32 E Galleggiante64 funzioni. Restituiscono rispettivamente numeri in virgola mobile a 32 e 64 bit.

Ecco come puoi generare numeri casuali in virgola mobile a 64 bit in Go.

importare (
"fmt"
"matematica / rand"
"tempo"
)

funzprincipale() {
rand. seme (tempo. Adesso().UnixNano())

// genera un float64 casuale compreso tra 0.0 e 1.0
randomFloat := rand. Float64()

fmt. Println (randomFloat)
}

Il processo di generazione di numeri in virgola mobile a 32 bit è lo stesso della generazione di numeri in virgola mobile a 64 bit casuali.

Generazione di numeri casuali crittograficamente sicuri in Go

Puoi usare il Int funzione del cripto/rand package per generare un numero casuale crittograficamente sicuro. IL Int la funzione accetta un'istanza del lettore e un numero massimo per il limite.

importare (
"cripto/rand"
"fmt"
"matematica/grande"
)

funzprincipale() {
// Crea un file big. Int con il valore massimo per l'intervallo desiderato
massimo := grande. NuovoInt(100000000)

// Genera un file big. Int
// Il primo argomento è un lettore che restituisce numeri casuali
// Il secondo argomento è il valore massimo (non incluso)
randInt, err := rand. Int (rand. Lettore, massimo)

Se errare!= zero {
fmt. Stampaln("Errore durante la generazione di un numero casuale:", ehm)
ritorno
}

fmt. Stampaln("Numero casuale:", randInt)
}

IL max variabile definisce il valore massimo per il numero casuale utilizzando il NuovoInt funzione del matematica/grande pacchetto. IL Int La funzione restituisce l'intero casuale e un errore per la gestione.

Generazione di valori casuali crittograficamente sicuri

IL cripto/rand pacchetto non fornisce funzionalità integrate da generare crittograficamente sicuro stringhe casuali. Tuttavia, puoi aggirare questo problema usando il file Leggere funzione.

importare (
"cripto/rand"
"fmt"
)

funzcriptocasuale(stringaChars corda, valoreLunghezza int32)corda {
byteSlice := Fare([]byte, valoreLunghezza)
_, err := rand. Lettura (byteSlice)

Se errare!= zero {
ritorno"Si è verificato un errore durante la lettura della fetta di byte"
}

per pos, valore := allineare bytesSlice {
randomizza := valore % byte(len(stringaCaratteri))
bytesSlice[pos] = stringChars[randomize]
}

ritornocorda(byteSlice)
}

funzprincipale() {
fmt. Println (cryptoRandom("Pneumoultram" +
"icroscopicsilicovolcanoconiosi", 10))
}

IL criptocasuale la funzione sopra accetta una stringa da cui generare una stringa casuale. Richiede anche una lunghezza, un numero intero a 32 bit, e restituisce una stringa.

Nel criptocasuale funzione, il bytesSlice variabile è una porzione della lunghezza della stringa richiesta. Il ciclo for-range attraversa la fetta di byte e restituisce e recupera il modulo degli elementi della fetta e la lunghezza della stringa in byte. Aggiorna l'indice della fetta di byte con l'indice del valore modulo della stringa.

Infine il criptocasuale La funzione restituisce il formato stringa della fetta di byte.

Puoi generare UUID con Go

La generazione di valori casuali è utile per un'ampia gamma di casi d'uso. Se hai bisogno di molti valori univoci casuali, puoi utilizzare gli UUID.

Gli UUID (Universally Unique Identifiers) garantiscono l'univocità globale degli identificatori. Puoi utilizzarli per distinguere le risorse tra i sistemi evitando conflitti di denominazione.

Ci sono molti pacchetti che puoi usare per generare UUID in Go. Puoi usare il pacchetto os per chiamare uuid comando sul tuo sistema operativo, ricorrere al pacchetto UUID di Google o utilizzare il pacchetto gouuid per generare UUID.