Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu. Loe rohkem.

Juhuslike arvude genereerimine on paljude ülesannete jaoks oluline. Nende hulka kuuluvad mängude arendamine, krüptograafia ja andmete analüüs. Juhuslikud väärtused võimaldavad saada erinevaid tulemusi koos varieeruvuse ja ettearvamatusega.

Go pakub standardteegis juhuslike väärtuste genereerimiseks kahte paketti: matemaatika/rand ja krüpto/rand. The matemaatika/rand pakett on mõeldud peamiselt matemaatiliste operatsioonide jaoks. The krüpto/rand pakett tegeleb krüptograafiliselt turvaliste toimingutega.

Rand paketid

The matemaatika/rand pakett pakub paindlikku meetodit juhuslike arvude genereerimine. See rakendab mitmesuguseid pseudojuhuslike arvude generatsioone. Pakett võib genereerida erineva jaotusega juhusliku arvu ja kasutada juhusliku jada juhtimiseks seemneid. Samuti võib see genereerida juhuslikke numbreid samaaegselt või paralleelselt.

The krüpto/rand pakett rakendab krüptograafiliselt turvalist juhuslike arvude generaatorit. See sisaldab funktsioone suure tõenäosusega juhuslike algarvude genereerimiseks.

Kuna neil pakettidel on sama nimi, peate kasutama varjunimesid, kui soovite kasutada mõlemat ühes programmis, näiteks:

importida (
crand "krüpto/rand"
mrand "matemaatika/rand"
)

Juhuslike täisarvude genereerimine rakenduses Go

Võite kasutada matemaatika/randIntn funktsioon juhuslike arvude genereerimiseks vahemikus.

importida (
"fmt"
"matemaatika/rand"
"aeg"
)

funcpeamine() {
rand. Seeme (aeg. Nüüd().UnixNano())

// Intn genereerib juhusliku täisarvu vahemikus 0 kuni 100
// (ilma 100)
randomInt := rand. Intn(100)

fmt. Println (randomInt)
}

See kood edastab praeguse aja seadmele Seeme funktsiooni. See initsialiseerib pseudojuhuslikkuse jaoks vaikimisi juhuslike arvude generaatori.

The Intn rand-paketi funktsioon genereerib juhusliku arvu määratud vahemikus, antud juhul 0 kuni 100.

Looge juhuslikke ujukoma numbreid

Saate genereerida juhuslikke ujukoma numbreid nupuga Ujuk32 ja Ujuk64 funktsioonid. Nad tagastavad vastavalt 32-bitised ja 64-bitised ujukomanumbrid.

Siit saate teada, kuidas saate Go-s genereerida juhuslikke 64-bitiseid ujukoma numbreid.

importida (
"fmt"
"matemaatika/rand"
"aeg"
)

funcpeamine() {
rand. Seeme (aeg. Nüüd().UnixNano())

// genereerida juhuslik float64 vahemikus 0,0 kuni 1,0
randomFloat := rand. Float64()

fmt. Println (randomFloat)
}

32-bitiste ujukomaarvude genereerimise protsess on sama, mis juhuslike 64-bitiste ujukomaarvude genereerimisel.

Krüptograafiliselt turvaliste juhuslike numbrite genereerimine rakenduses Go

Võite kasutada Int funktsioon krüpto/rand pakett krüptograafiliselt turvalise juhusliku numbri genereerimiseks. The Int funktsioon võtab lugeja eksemplari ja limiidi maksimaalse arvu.

importida (
"krüpto/rand"
"fmt"
"matemaatika/suur"
)

funcpeamine() {
// Loo suur. Int soovitud vahemiku maksimaalse väärtusega
max := suur. NewInt(100000000)

// Loo juhuslik suur. Int
// Esimene argument on lugeja, mis tagastab juhuslikud arvud
// Teine argument on maksimaalne väärtus (ei kaasa arvatud)
randInt, err := rand. Int (rand. Lugeja, max)

kui eks!= null {
fmt. Println("Viga juhusliku arvu loomisel:", eksitus)
tagasi
}

fmt. Println("Juhuslik arv:", randInt)
}

The max muutuja määrab juhusliku arvu maksimaalse väärtuse, kasutades UusInt funktsioon matemaatika/suur pakett. The Int funktsioon tagastab juhusliku täisarvu ja veateate töötlemiseks.

Krüptograafiliselt turvaliste juhuslike väärtuste loomine

The krüpto/rand pakett ei paku loomiseks sisseehitatud funktsioone krüptograafiliselt turvaline juhuslikud stringid. Siiski saate sellest mööda minna, kasutades Lugege funktsiooni.

importida (
"krüpto/rand"
"fmt"
)

funckrüptoJuhuslik(stringChars string, väärtusPikkus int32)string {
bytesSlice := tegema([]bait, väärtusPikkus)
_, eksitus := rand. Loe (bytesSlice)

kui eks!= null {
tagasi"Baidilõigu lugemisel tekkis viga"
}

jaoks pos, väärtus := ulatus bytesSlice {
juhuslikult := väärtus % bait(len(stringChars))
bytesSlice[pos] = stringChars[randomisize]
}

tagasistring(bytesSlice)
}

funcpeamine() {
fmt. Println (cryptoRandom("Pneumoultraam" +
"ikroskoopiline silikovulkanokonioos", 10))
}

The krüptoJuhuslik ülaltoodud funktsioon võtab stringi, millest genereerida juhuslik string. See võtab ka pikkuse – 32-bitise täisarvu – ja tagastab stringi.

Aastal krüptoJuhuslik funktsioon, bytesSlice muutuja on vajaliku stringi pikkuse osa. For-range tsükkel läbib baidilõigu ning tagastab ja otsib välja lõigu elementide mooduli ja stringi pikkuse baitides. See värskendab baidilõigu indeksi stringi moodulväärtuse indeksiga.

Lõpuks, krüptoJuhuslik funktsioon tagastab baidilõigu stringivormingu.

Go abil saate luua UUID-sid

Juhuslike väärtuste genereerimine on kasulik paljudel kasutusjuhtudel. Kui vajate palju juhuslikke unikaalseid väärtusi, võite kasutada UUID-sid.

UUID-id (Universally Unique Identifiers) tagavad identifikaatorite globaalse unikaalsuse. Saate neid kasutada ressursside eristamiseks süsteemide lõikes, vältides samas nimetamiskonflikte.

Go-s UUID-de loomiseks saate kasutada paljusid pakette. Uuidile helistamiseks saate kasutada operatsioonisüsteemi paketti käsk oma operatsioonisüsteemis, kasutage Google'i UUID-paketti või kasutage genereerimiseks paketti gouuid UUID-id.