Tokie skaitytojai kaip jūs padeda palaikyti MUO. Kai perkate naudodami nuorodas mūsų svetainėje, galime uždirbti filialų komisinius. Skaityti daugiau.

Atsitiktinių skaičių generavimas yra svarbus daugeliui užduočių. Tai apima žaidimų kūrimą, kriptografiją ir duomenų analizę. Atsitiktinės reikšmės leidžia gauti skirtingus rezultatus, turinčius kintamumo ir nenuspėjamumo elementą.

„Go“ pateikia du paketus atsitiktinių verčių generavimui standartinėje bibliotekoje: matematika/rand ir kriptovaliuta / randas. The matematika/rand Paketas daugiausia skirtas matematinėms operacijoms. The kriptovaliuta / randas paketas tvarko kriptografiškai saugias operacijas.

Randų paketai

The matematika/rand paketas suteikia lankstų metodą atsitiktinių skaičių generavimas. Jame įdiegtos įvairios pseudoatsitiktinių skaičių kartos. Paketas gali generuoti atsitiktinį skaičių su skirtingais paskirstymais ir naudoti sėklas atsitiktinei sekai valdyti. Jis taip pat gali generuoti atsitiktinius skaičius vienu metu arba lygiagrečiai.

instagram viewer

The kriptovaliuta / randas paketas įgyvendina kriptografiškai saugų atsitiktinių skaičių generatorių. Ji apima funkcionalumą generuoti atsitiktinius pirminius skaičius su didele tikimybe.

Kadangi šie paketai turi tą patį pavadinimą, turėsite naudoti slapyvardžius, jei norite naudoti abu vienoje programoje, pavyzdžiui:

importuoti (
kranas "crypto/rand"
mrand "matematika/rand"
)

Atsitiktinių sveikųjų skaičių generavimas programoje Go

Galite naudoti matematika/randasTarpt funkcija generuoti atsitiktinius skaičius diapazone.

importuoti (
"fmt"
"matematika/rand"
"laikas"
)

funcpagrindinis() {
rand. Sėkla (laikas. Dabar().UnixNano())

// Intn generuoja atsitiktinį sveikąjį skaičių nuo 0 iki 100
// (neįskaitant 100)
randomInt := rand. Intn(100)

fmt. Println (randomInt)
}

Šis kodas perduoda esamą laiką į Sėkla funkcija. Jis inicijuoja numatytąjį atsitiktinių skaičių generatorių pseudoatsitiktinumui.

The Tarpt rand paketo funkcija generuoja atsitiktinį skaičių tarp nurodyto diapazono, šiuo atveju nuo 0 iki 100.

Generuokite atsitiktinius slankiojo kablelio skaičius

Galite generuoti atsitiktinius slankiojo kablelio skaičius naudodami Plūdis32 ir Plūduriuoti64 funkcijas. Jie grąžina atitinkamai 32 bitų ir 64 bitų slankiojo kablelio skaičius.

Štai kaip „Go“ galite sugeneruoti atsitiktinius 64 bitų slankiojo kablelio skaičius.

importuoti (
"fmt"
"matematika/rand"
"laikas"
)

funcpagrindinis() {
rand. Sėkla (laikas. Dabar().UnixNano())

// generuoti atsitiktinį float64 tarp 0.0 ir 1.0
randomFloat := rand. Float64()

fmt. Println (randomFloat)
}

32 bitų slankiojo kablelio skaičių generavimo procesas yra toks pat, kaip ir atsitiktinių 64 bitų slankiojo kablelio skaičių generavimo procesas.

Kriptografiškai saugių atsitiktinių skaičių generavimas „Go“.

Galite naudoti Tarpt funkcija kriptovaliuta / randas paketą kriptografiškai saugiam atsitiktiniam skaičiui generuoti. The Tarpt funkcija paima skaitytuvo egzempliorių ir didžiausią limito skaičių.

importuoti (
"crypto/rand"
"fmt"
"matematika/didelis"
)

funcpagrindinis() {
// Sukurti didelį. Int su didžiausia norimo diapazono reikšme
max := didelis. NewInt(100000000)

// Sugeneruokite atsitiktinį didelį. Tarpt
// Pirmasis argumentas yra skaitytuvas, kuris grąžina atsitiktinius skaičius
// Antrasis argumentas yra didžiausia vertė (neįskaitant)
randInt, err := rand. Int (rand. Skaitytojas, maks.)

jeigu klysta! = nulis {
fmt. Println("Klaida generuojant atsitiktinį skaičių:", klaida)
grąžinti
}

fmt. Println("Atsitiktinis skaičius:", randInt)
}

The maks kintamasis apibrėžia didžiausią atsitiktinio skaičiaus reikšmę naudojant NewInt funkcija matematika/didelis paketą. The Tarpt funkcija grąžina atsitiktinį sveikąjį skaičių ir tvarkymo klaidą.

Kriptografiškai saugių atsitiktinių verčių generavimas

The kriptovaliuta / randas paketas nesuteikia įmontuotų generavimo funkcijų kriptografiškai saugus atsitiktinės eilutės. Vis dėlto galite tai išspręsti naudodami Skaityti funkcija.

importuoti (
"crypto/rand"
"fmt"
)

funckriptovaliuta(stringChars styga, valueLength int32)styga {
bytesSlice := padaryti([]baitas, valueLength)
_, klaida := rand. Skaityti (bytesSlice)

jeigu klysta! = nulis {
grąžinti„Įvyko klaida skaitant iš baitų skilties“
}

dėl poz., vertė := diapazonas bytesSlice {
atsitiktine tvarka := vertė % baitas(len(stringchars))
bytesSlice[pos] = stringChars[atsitiktinis]
}

grąžintistyga(bytesSlice)
}

funcpagrindinis() {
fmt. Println (cryptoRandom("Pneumoultramas" +
"Ikroskopinė silikovulkanokoniozė", 10))
}

The kriptovaliuta Aukščiau pateikta funkcija paima eilutę, iš kurios generuojama atsitiktinė eilutė. Ji taip pat užima ilgį – 32 bitų sveikąjį skaičių – ir grąžina eilutę.

Viduje kriptovaliuta funkcija, bytesSlice kintamasis yra reikiamo eilutės ilgio dalis. For-range kilpa kerta baitų atkarpą ir grąžina bei nuskaito pjūvio elementų modulį ir eilutės ilgį baitais. Jis atnaujina baitų pjūvio indeksą su eilutės modulio vertės indeksu.

Galiausiai, kriptovaliuta funkcija grąžina baitų pjūvio eilutės formatą.

Galite generuoti UUID naudodami „Go“.

Atsitiktinių verčių generavimas yra naudingas įvairiais naudojimo atvejais. Jei jums reikia daug atsitiktinių, unikalių reikšmių, galite naudoti UUID.

UUID (Universally Unique Identifiers) užtikrina visuotinį identifikatorių unikalumą. Galite juos naudoti norėdami atskirti išteklius įvairiose sistemose, išvengdami pavadinimų konfliktų.

Yra daug paketų, kuriuos galite naudoti UUID generavimui Go. Norėdami paskambinti uuid, galite naudoti os paketą komandą operacinėje sistemoje, pasinaudokite „Google“ UUID paketu arba naudokite paketą „gouuid“, kad sukurtumėte UUID.