Het genereren van willekeurige getallen is belangrijk voor veel taken. Deze omvatten game-ontwikkeling, cryptografie en data-analyse. Willekeurige waarden zorgen voor verschillende uitkomsten met een element van variabiliteit en onvoorspelbaarheid.
Go biedt twee pakketten voor het genereren van willekeurige waarden in de standaardbibliotheek: wiskunde/rand En crypto/rand. De wiskunde/rand pakket is voornamelijk voor wiskundige bewerkingen. De crypto/rand pakket handelt cryptografisch beveiligde bewerkingen af.
De randpakketten
De wiskunde/rand pakket biedt een flexibele methode voor willekeurige getallen genereren. Het implementeert een verscheidenheid aan generaties van pseudo-willekeurige getallen. Het pakket kan een willekeurig getal met verschillende distributies genereren en zaden gebruiken om de willekeurige volgorde te regelen. Het kan ook gelijktijdig of parallel willekeurige getallen genereren.
De crypto/rand pakket implementeert een cryptografisch veilige random number generator. Het bevat functionaliteit om willekeurige priemgetallen met grote waarschijnlijkheid te genereren.
Aangezien deze pakketten dezelfde naam hebben, moet u aliassen gebruiken als u beide in één programma wilt gebruiken, bijvoorbeeld:
importeren (
kraan "crypto/rand"
De heer en "wiskunde/rand"
)
Willekeurige gehele getallen genereren in Go
U kunt de wiskunde/rand'sInt functie om willekeurige getallen in een bereik te genereren.
importeren (
"fmt"
"wiskunde/rand"
"tijd"
)funcvoornaamst() {
rand. Zaad (tijd. Nu().UnixNano())// Intn genereert een willekeurig geheel getal tussen 0 en 100
// (exclusief 100)
randomInt := rand. intern(100)
fmt. Println (randomInt)
}
Deze code geeft de huidige tijd door aan de Zaad functie. Het initialiseert de standaard generator voor willekeurige getallen voor pseudo-willekeurigheid.
De Int De functie van het pakket rand genereert een willekeurig getal tussen een opgegeven bereik, in dit geval 0 tot 100.
Genereer willekeurige getallen met drijvende komma
U kunt willekeurige getallen met drijvende komma genereren met de Zweven32 En Vlotter64 functies. Ze retourneren respectievelijk 32-bits en 64-bits getallen met drijvende komma.
Hier leest u hoe u willekeurige 64-bits getallen met drijvende komma kunt genereren in Go.
importeren (
"fmt"
"wiskunde/rand"
"tijd"
)funcvoornaamst() {
rand. Zaad (tijd. Nu().UnixNano())// genereer een willekeurige float64 tussen 0.0 en 1.0
randomFloat := rand. Zweven64()
fmt. Println (randomFloat)
}
Het proces van het genereren van 32-bits getallen met drijvende komma is hetzelfde als het genereren van willekeurige 64-bits getallen met drijvende komma.
Cryptografisch beveiligde willekeurige getallen genereren in Go
U kunt de Int functie van de crypto/rand pakket om een cryptografisch beveiligd willekeurig getal te genereren. De Int functie neemt een lezerinstantie en een maximum aantal voor de limiet.
importeren (
"crypto/rand"
"fmt"
"wiskunde/groot"
)funcvoornaamst() {
// Maak een groot. Int met de maximale waarde voor het gewenste bereik
maximaal := groot. NieuwInt(100000000)
// Genereer een willekeurig groot. Int
// Het eerste argument is een lezer die willekeurige getallen retourneert
// Het tweede argument is de maximale waarde (niet inclusief)
randInt, fout := rand. Int (rand. Lezer, maximaal)
als fout!= nihil {
fmt. Println("Fout bij genereren van willekeurig getal:", fout)
opbrengst
}
fmt. Println("Willekeurig nummer:", randInt)
}
De max variabele definieert de maximale waarde voor het willekeurige getal met behulp van de NieuwInt functie van de wiskunde/groot pakket. De Int functie retourneert het willekeurige gehele getal en een fout voor afhandeling.
Cryptografisch beveiligde willekeurige waarden genereren
De crypto/rand pakket biedt geen ingebouwde functionaliteit om te genereren cryptografisch beveiligd willekeurige strings. Toch kun je dit omzeilen met behulp van de Lezen functie.
importeren (
"crypto/rand"
"fmt"
)funccryptoRandom(tekenreeksen snaar, waardeLengte int32)snaar {
bytesSlice := maken([]byte, waardeLengte)
_, fout := rand. Lezen (bytesSlice)als fout!= nihil {
opbrengst"Er is een fout opgetreden bij het lezen van de byte slice"
}voor pos, waarde := bereik bytesSlice {
willekeurig maken := waarde % byte(lenen(stringChars))
bytesSlice[pos] = stringChars[willekeurig maken]
}opbrengstsnaar(bytesSlice)
}
funcvoornaamst() {
fmt. Println (cryptoRandom("Pneumonultram" +
"icroscopischesilicovolcanoconiosis", 10))
}
De cryptoRandom bovenstaande functie neemt een string op om een willekeurige string uit te genereren. Er is ook een lengte voor nodig - een 32-bits geheel getal - en retourneert een tekenreeks.
In de cryptoRandom functie, de bytesSlice variabele is een deel van de vereiste tekenreekslengte. De for-range-lus doorloopt de byte-slice en keert terug en haalt de modulus van de elementen van de slice en de lengte van de string in bytes op. Het werkt de index van de byte-slice bij met de modulo-waarde-index van de string.
eindelijk, de cryptoRandom functie retourneert de tekenreeksindeling van het bytesegment.
U kunt UUID's genereren met Go
Het genereren van willekeurige waarden is handig voor een breed scala aan gebruiksscenario's. Als u veel willekeurige, unieke waarden nodig heeft, kunt u UUID's gebruiken.
UUID's (Universally Unique Identifiers) zorgen voor wereldwijde uniciteit voor identifiers. U kunt ze gebruiken om onderscheid te maken tussen bronnen in verschillende systemen, terwijl u naamconflicten vermijdt.
Er zijn veel pakketten die u kunt gebruiken om UUID's in Go te genereren. U kunt het os-pakket gebruiken om de uuid aan te roepen commando op uw besturingssysteem, gebruik het UUID-pakket van Google of gebruik het gouuid-pakket om UUID's.