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.
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.