Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

Generering av tilfeldig tall er viktig for mange oppgaver. Disse inkluderer spillutvikling, kryptografi og dataanalyse. Tilfeldige verdier åpner for distinkte utfall med et element av variasjon og uforutsigbarhet.

Go gir to pakker for å generere tilfeldige verdier i standardbiblioteket: matte/rand og krypto/rand. De matte/rand pakken er hovedsakelig for matematiske operasjoner. De krypto/rand pakken håndterer kryptografisk sikre operasjoner.

Rand-pakkene

De matte/rand pakken gir en fleksibel metode for generere tilfeldige tall. Den implementerer en rekke pseudo-tilfeldige tallgenerasjoner. Pakken kan generere et tilfeldig tall med forskjellige distribusjoner, og bruke frø til å kontrollere den tilfeldige sekvensen. Den kan også generere tilfeldige tall samtidig eller parallelt.

De krypto/rand pakken implementerer en kryptografisk sikker tilfeldig tallgenerator. Den inkluderer funksjonalitet for å generere tilfeldige primtall med høy sannsynlighet.

Siden disse pakkene har samme navn, må du bruke aliaser hvis du vil bruke begge i et enkelt program, for eksempel:

import (
crand "krypto/rand"
mrand "matte/rand"
)

Generer tilfeldige heltall i Go

Du kan bruke matematikk/randIntn funksjon for å generere tilfeldige tall i et område.

import (
"fmt"
"matte/rand"
"tid"
)

funchoved-() {
rand. Frø (tid. Nå().UnixNano())

// Intn genererer et tilfeldig heltall mellom 0 og 100
// (ikke inkludert 100)
randomInt := rand. Intn(100)

fmt. Println (randomInt)
}

Denne koden overfører gjeldende tid til Frø funksjon. Den initialiserer standard tilfeldig tallgenerator for pseudo-tilfeldighet.

De Intn funksjonen til rand-pakken genererer et tilfeldig tall mellom et spesifisert område, i dette tilfellet 0 til 100.

Generer tilfeldige flytende kommatall

Du kan generere tilfeldige flyttallstall med Float32 og Float64 funksjoner. De returnerer henholdsvis 32-biters og 64-biters flyttall.

Slik kan du generere tilfeldige 64-bits flyttall i Go.

import (
"fmt"
"matte/rand"
"tid"
)

funchoved-() {
rand. Frø (tid. Nå().UnixNano())

// generer en tilfeldig float64 mellom 0,0 og 1,0
randomFloat := rand. Float64()

fmt. Println (randomFloat)
}

Prosessen med å generere 32-bits flyttall er den samme som å generere tilfeldige 64-bits flyttall.

Generer kryptografisk sikre tilfeldige tall på gang

Du kan bruke Int funksjonen til krypto/rand pakke for å generere et kryptografisk sikkert tilfeldig nummer. De Int funksjonen tar i en leserforekomst og et maksimalt antall for grensen.

import (
"krypto/rand"
"fmt"
"matte/stor"
)

funchoved-() {
// Lag en stor. Int med maksimumsverdien for ønsket område
maks := stor. NewInt(100000000)

// Generer en tilfeldig stor. Int
// Det første argumentet er en leser som returnerer tilfeldige tall
// Det andre argumentet er maksimumsverdien (ikke inkluderende)
randInt, feil := rand. Int (rand. Leser, maks.)

hvis feil!= null {
fmt. Println("Feil under generering av tilfeldig tall:", feil)
komme tilbake
}

fmt. Println("Tilfeldig tall:", randInt)
}

De maks variabel definerer maksimalverdien for det tilfeldige tallet ved å bruke NewInt funksjonen til matematikk/stort pakke. De Int funksjonen returnerer det tilfeldige heltall og en feil for håndtering.

Generering av kryptografisk sikre tilfeldige verdier

De krypto/rand pakken gir ikke innebygd funksjonalitet for å generere kryptografisk sikker tilfeldige strenger. Likevel kan du jobbe deg rundt dette ved å bruke Lese funksjon.

import (
"krypto/rand"
"fmt"
)

funckryptoRandom(stringChars streng, verdiLengde int32)streng {
bytesSlice := gjøre([]byte, valueLength)
_, feil := rand. Les (bytesSlice)

hvis feil!= null {
komme tilbake"Det oppsto en feil ved lesing fra bytesnittet"
}

til pos, verdi := område bytesSlice {
randomiser := verdi % byte(len(stringChars))
bytesSlice[pos] = stringChars[randomize]
}

komme tilbakestreng(bytesSlice)
}

funchoved-() {
fmt. Println (cryptoRandom("Pneumonoultram" +
"ikroskopisk silicovolcanoconiosis", 10))
}

De kryptoRandom funksjonen ovenfor tar inn en streng for å generere en tilfeldig streng fra. Den tar også en lengde – et 32-bits heltall – og returnerer en streng.

I kryptoRandom funksjon, den bytesSlice variabel er et stykke av den nødvendige strenglengden. For-range-løkken krysser byte-stykket og returnerer og henter modulen til elementene i skiven og lengden på strengen i byte. Den oppdaterer indeksen til byte-stykket med modulo-verdiindeksen til strengen.

Til slutt, den kryptoRandom funksjonen returnerer strengformatet til byte-stykket.

Du kan generere UUID-er med Go

Generering av tilfeldige verdier er nyttig for et bredt spekter av brukstilfeller. Hvis du trenger mange tilfeldige, unike verdier, kan du bruke UUID-er.

UUID-er (Universally Unique Identifiers) sikrer global unikhet for identifikatorer. Du kan bruke dem til å skille mellom ressurser på tvers av systemer samtidig som du unngår navnekonflikter.

Det er mange pakker du kan bruke til å generere UUID-er i Go. Du kan bruke os-pakken til å ringe uuid kommandoen på operativsystemet ditt, ty til Googles UUID-pakke, eller bruk gouuid-pakken for å generere UUID-er.