Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Generiranje naključnih števil je pomembno za številne naloge. Ti vključujejo razvoj iger, kriptografijo in analizo podatkov. Naključne vrednosti omogočajo različne rezultate z elementom spremenljivosti in nepredvidljivosti.

Go nudi dva paketa za generiranje naključnih vrednosti v standardni knjižnici: matematika/rand in kripto/rand. The matematika/rand paket je v glavnem za matematične operacije. The kripto/rand paket obravnava kriptografsko varne operacije.

Rand paketi

The matematika/rand paket ponuja prilagodljiv način za generiranje naključnih števil. Izvaja različne generacije psevdonaključnih števil. Paket lahko ustvari naključno število z različnimi porazdelitvami in uporabi semena za nadzor naključnega zaporedja. Prav tako lahko ustvarja naključna števila sočasno ali vzporedno.

The kripto/rand paket implementira kriptografsko varen generator naključnih števil. Vključuje funkcionalnost za ustvarjanje naključnih praštevil z visoko verjetnostjo.

instagram viewer

Ker imajo ti paketi isto ime, boste morali uporabiti vzdevke, če želite uporabiti oba v enem samem programu, na primer:

uvoz (
crand "kripto/rand"
mrand "matematika/rand"
)

Generiranje naključnih celih števil v Go

Lahko uporabite matematika/randovIntn funkcija za ustvarjanje naključnih števil v območju.

uvoz (
"fmt"
"matematika/rand"
"čas"
)

funkglavni() {
rand. Seme (čas. Zdaj().UnixNano())

// Intn generira naključno celo število med 0 in 100
// (brez 100)
randomInt := rand. Intn(100)

fmt. Println (randomInt)
}

Ta koda posreduje trenutni čas v Seme funkcijo. Inicializira privzeti generator naključnih števil za psevdonaključnost.

The Intn funkcija paketa rand ustvari naključno število v določenem obsegu, v tem primeru od 0 do 100.

Ustvari naključna števila s plavajočo vejico

Ustvarite lahko naključna števila s plavajočo vejico z Float32 in Float64 funkcije. Vrnejo 32-bitna oziroma 64-bitna števila s plavajočo vejico.

Tukaj je opisano, kako lahko ustvarite naključna 64-bitna števila s plavajočo vejico v Go.

uvoz (
"fmt"
"matematika/rand"
"čas"
)

funkglavni() {
rand. Seme (čas. Zdaj().UnixNano())

// ustvari naključno vrednost float64 med 0,0 in 1,0
randomFloat := rand. Float64()

fmt. Println (randomFloat)
}

Postopek generiranja 32-bitnih števil s plavajočo vejico je enak kot generiranje naključnih 64-bitnih števil s plavajočo vejico.

Ustvarjanje kriptografsko varnih naključnih števil v Go

Lahko uporabite Int funkcija kripto/rand paket za ustvarjanje kriptografsko varnega naključnega števila. The Int funkcija vzame primerek bralnika in največje število za omejitev.

uvoz (
"kripto/rand"
"fmt"
"matematika/velik"
)

funkglavni() {
// Ustvari velik. Int z največjo vrednostjo za želeni obseg
max := velik. NewInt(100000000)

// Ustvari naključno veliko. Int
// Prvi argument je bralnik, ki vrne naključna števila
// Drugi argument je največja vrednost (ne vključuje)
randInt, napaka := rand. Int (rand. Bralec, največ)

če napaka!= nič {
fmt. Println("Napaka pri ustvarjanju naključnega števila:", napaka)
vrnitev
}

fmt. Println("Naključno število:", randInt)
}

The maks spremenljivka definira največjo vrednost za naključno število z uporabo NewInt funkcija matematika/velik paket. The Int funkcija vrne naključno celo število in napako za obdelavo.

Ustvarjanje kriptografsko varnih naključnih vrednosti

The kripto/rand paket ne nudi vgrajene funkcije za ustvarjanje kriptografsko varen naključni nizi. Kljub temu se lahko temu izognete z uporabo Preberi funkcijo.

uvoz (
"kripto/rand"
"fmt"
)

funkcryptoRandom(stringChars vrvica, valueLength int32)vrvica {
bytesSlice := narediti([]bajt, valueLength)
_, napaka := rand. Branje (bytesSlice)

če napaka!= nič {
vrnitev"Pri branju iz rezine bajta je prišlo do napake"
}

za pos, vrednost := obseg bytesSlice {
naključno := vrednost % bajt(len(stringChars))
bytesSlice[pos] = stringChars[randomize]
}

vrnitevvrvica(bytesSlice)
}

funkglavni() {
fmt. Println (cryptoRandom("Pnevmonoultram" +
"ikroskopska silikovulkanokonioza", 10))
}

The cryptoRandom zgornja funkcija sprejme niz, iz katerega ustvari naključni niz. Vzame tudi dolžino – 32-bitno celo število – in vrne niz.

V cryptoRandom funkcija, bytesSlice spremenljivka je rezina zahtevane dolžine niza. Zanka for-range prečka bajtno rezino ter vrne in pridobi modul elementov rezine in dolžino niza v bajtih. Posodobi indeks bajtne rezine z indeksom modulo vrednosti niza.

Končno, cryptoRandom funkcija vrne obliko niza bajtne rezine.

UUID-je lahko ustvarite z Go

Ustvarjanje naključnih vrednosti je priročno za številne primere uporabe. Če potrebujete veliko naključnih edinstvenih vrednosti, lahko uporabite UUID-je.

UUID (Universally Unique Identifiers) zagotavljajo globalno edinstvenost identifikatorjev. Uporabite jih lahko za razlikovanje med viri v sistemih, hkrati pa se izognete sporom pri poimenovanju.

Obstaja veliko paketov, ki jih lahko uporabite za ustvarjanje UUID-jev v Go. Za klic uuid lahko uporabite paket os ukaz v vašem operacijskem sistemu, uporabite Googlov paket UUID ali uporabite paket gouuid za ustvarjanje UUID-ji.