Generiranje slučajnih brojeva važno je za mnoge zadatke. To uključuje razvoj igara, kriptografiju i analizu podataka. Slučajne vrijednosti dopuštaju različite ishode s elementom varijabilnosti i nepredvidivosti.
Go nudi dva paketa za generiranje nasumičnih vrijednosti u standardnoj biblioteci: matematika/rand i kripto/rand. The matematika/rand paket je uglavnom za matematičke operacije. The kripto/rand paket upravlja kriptografski sigurnim operacijama.
Rand paketi
The matematika/rand paket pruža fleksibilnu metodu za generiranje slučajnih brojeva. Implementira različite generacije pseudoslučajnih brojeva. Paket može generirati slučajni broj s različitim distribucijama i koristiti sjemenke za kontrolu slučajnog niza. Također može generirati slučajne brojeve istovremeno ili paralelno.
The kripto/rand paket implementira kriptografski siguran generator slučajnih brojeva. Uključuje funkcionalnost za generiranje nasumičnih prostih brojeva s velikom vjerojatnošću.
Budući da ovi paketi imaju isto ime, morat ćete koristiti pseudonime ako želite koristiti oba u jednom programu, na primjer:
uvoz (
crand "kripto/rand"
mrand "matematika/rand"
)
Generiranje nasumičnih cijelih brojeva u Gou
Možete koristiti matematika/randoviIntn funkcija za generiranje nasumičnih brojeva u rasponu.
uvoz (
"fmt"
"matematika/rand"
"vrijeme"
)funkglavni() {
rand. Sjeme (vrijeme. Sada().UnixNano())// Intn generira nasumični cijeli broj između 0 i 100
// (ne uključujući 100)
randomInt := rand. Intn(100)
fmt. Println (randomInt)
}
Ovaj kod prosljeđuje trenutno vrijeme u Sjeme funkcija. Inicijalizira zadani generator slučajnih brojeva za pseudoslučajnost.
The Intn funkcija paketa rand generira slučajni broj između određenog raspona, u ovom slučaju od 0 do 100.
Generirajte nasumične brojeve s pomičnim zarezom
Možete generirati nasumične brojeve s pomičnim zarezom pomoću Plutanje32 i Float64 funkcije. Vraćaju 32-bitne i 64-bitne brojeve s pomičnim zarezom.
Evo kako možete generirati nasumične 64-bitne brojeve s pomičnim zarezom u Gou.
uvoz (
"fmt"
"matematika/rand"
"vrijeme"
)funkglavni() {
rand. Sjeme (vrijeme. Sada().UnixNano())// generira nasumični float64 između 0.0 i 1.0
randomFloat := rand. Float64()
fmt. Println (randomFloat)
}
Proces generiranja 32-bitnih brojeva s pomičnim zarezom isti je kao i generiranje nasumičnih 64-bitnih brojeva s pomičnim zarezom.
Generiranje kriptografski sigurnih nasumičnih brojeva u Gou
Možete koristiti Int funkcija kripto/rand paket za generiranje kriptografski sigurnog slučajnog broja. The Int funkcija uzima instancu čitača i maksimalni broj za ograničenje.
uvoz (
"kripto/rand"
"fmt"
"matematika/veliko"
)funkglavni() {
// Stvorite veliki. Int s maksimalnom vrijednošću za željeni raspon
max := veliko. NewInt(100000000)
// Generiraj slučajni veliki. Int
// Prvi argument je čitač koji vraća nasumične brojeve
// Drugi argument je najveća vrijednost (ne uključuje)
randInt, pogreška := rand. Int (rand. Čitač, max)
ako pogriješiti != nula {
fmt. Println("Pogreška pri generiranju slučajnog broja:", pogreška)
povratak
}
fmt. Println("Nasumični broj:", randInt)
}
The max varijabla definira maksimalnu vrijednost za slučajni broj pomoću NewInt funkcija matematika/velik paket. The Int funkcija vraća slučajni cijeli broj i pogrešku za rukovanje.
Generiranje kriptografski sigurnih slučajnih vrijednosti
The kripto/rand paket ne nudi ugrađenu funkcionalnost za generiranje kriptografski siguran slučajni nizovi. Ipak, to možete zaobići pomoću Čitati funkcija.
uvoz (
"kripto/rand"
"fmt"
)funkcryptoRandom(stringChars niz, valueLength int32)niz {
bytesSlice := napraviti([]bajt, valueLength)
_, pogreška := rand. Čitaj (bytesSlice)ako pogriješiti != nula {
povratak"Došlo je do pogreške pri čitanju iz odsječka bajta"
}za pos, vrijednost := domet bytesSlice {
nasumično := vrijednost % bajt(leća(stringChars))
bytesSlice[pos] = stringChars[randomize]
}povratakniz(bytesSlice)
}
funkglavni() {
fmt. Println (cryptoRandom("Pneumonoultram" +
"ikroskopski silikovulkanokonioza", 10))
}
The cryptoRandom gornja funkcija uzima niz iz kojeg generira nasumični niz. Također uzima duljinu—32-bitni cijeli broj—i vraća niz.
u cryptoRandom funkcija, bytesSlice varijabla je isječak potrebne duljine niza. For-range petlja prelazi odsječak bajta i vraća i dohvaća modul elemenata odsječka i duljinu niza u bajtovima. Ažurira indeks odsječka bajta s indeksom modulo vrijednosti niza.
Konačno, cryptoRandom funkcija vraća format niza odsječka bajta.
Možete generirati UUID-ove s Go
Generiranje nasumičnih vrijednosti korisno je za širok raspon slučajeva upotrebe. Ako trebate mnogo slučajnih, jedinstvenih vrijednosti, možete koristiti UUID-ove.
UUID-ovi (Universally Unique Identifiers) osiguravaju globalnu jedinstvenost za identifikatore. Možete ih koristiti za razlikovanje resursa u različitim sustavima, izbjegavajući sukobe naziva.
Postoji mnogo paketa koje možete koristiti za generiranje UUID-ova u Gou. Možete koristiti os paket za pozivanje uuid-a na vašem operativnom sustavu, pribjegnite Googleovom UUID paketu ili upotrijebite paket gouuid za generiranje UUID-ovi.