Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

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.

instagram viewer

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.