Genererer tilfeldige tall

Go:
Genererer tilfeldige tall

Hvordan:

I Go genereres tilfeldige numre ved å bruke math/rand-pakken for pseudotilfeldige numre eller crypto/rand for kryptografisk sikre pseudotilfeldige numre. La oss utforske begge.

Bruke math/rand for Pseudotilfeldige Numre

Først, importer math/rand-pakken og time-pakken for å så generatoren. Å så sørger for at du får en annen sekvens av numre ved hvert kjør.

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	rand.Seed(time.Now().UnixNano())
	fmt.Println("Et tilfeldig nummer:", rand.Intn(100)) // Genererer et nummer mellom 0 og 99
}

Eksempel på utdata: Et tilfeldig nummer: 42

Bruke crypto/rand for Kryptografisk Sikre Pseudotilfeldige Numre

For applikasjoner med høyere sikkerhetskrav, er crypto/rand-pakken egnet siden den genererer tilfeldige numre som er vanskelige å forutsi, noe som gjør dem egnet for kryptografiske operasjoner.

package main

import (
	"crypto/rand"
	"fmt"
	"math/big"
)

func main() {
	n, _ := rand.Int(rand.Reader, big.NewInt(100))
	fmt.Println("Et sikkert tilfeldig nummer:", n)
}

Eksempel på utdata: Et sikkert tilfeldig nummer: 81

Dypdykk

Kjerneforskjellen mellom math/rand- og crypto/rand-pakkene i Go stammer fra deres kilde til entropi og deres tiltenkte brukstilfeller. math/rand genererer pseudotilfeldige numre basert på et innledende frø; dermed er sekvensen deterministisk og kan forutsies hvis frøet er kjent. Dette er passende for scenarier hvor høy ytelse og ikke absolutt uforutsigbarhet er hovedbekymringen, som simuleringer eller spill.

På den andre siden henter crypto/rand tilfeldighet fra operativsystemet, noe som gjør det egnet for kryptografiske bruksområder der uforutsigbarhet er avgjørende. Dette kommer imidlertid på bekostning av ytelse og kompleksitet i håndteringen av tallene den genererer (som å håndtere *big.Int-typen for heltall).

Historisk har konseptet med generering av tilfeldige numre i datamaskiner alltid danset på grensen til ekte “tilfeldighet,” med tidlige systemer som avhengig sterkt av deterministiske algoritmer som etterlignet tilfeldighet. Ettersom datamaskiner utviklet seg, gjorde også disse algoritmene det, og inkluderte mer sofistikerte kilder til entropi fra sine omgivelser.

Til tross for disse fremskrittene, er jakten på perfekt tilfeldighet i databehandling i seg selv paradoksal, gitt datamaskinenes deterministiske natur. Dette er grunnen til at, for de fleste applikasjoner der forutsigbarhet ville vært skadelig, er kryptografisk sikre pseudotilfeldige numre fra kilder som crypto/rand det bedre alternativet, til tross for deres overhead.

I essens adresserer Gos tilnærming med to distinkte pakker for generering av tilfeldige numre elegant avveiningene mellom ytelse og sikkerhet, og lar utviklere velge basert på deres spesifikke behov.