Ce face math/rand/v2.Int
Funcțiile fără limită returnează o valoare aleatorie din tot domeniul tipului. rand.Int(), rand.Int32() și rand.Int64() dau doar valori nenegative (bitul de semn este mereu 0). rand.Uint(), rand.Uint32() și rand.Uint64() folosesc toți biții.
Le folosești pentru identificatori aleatorii, valori „hash” sau ca sursă de biți. Pentru un interval anume (zar, index într-un slice) folosește IntN: rand.Int() % n favorizează puțin valorile mici.
Funcțiile de la nivelul pachetului dau alte valori la fiecare rulare. Pe un generator cu seed (rand.New(rand.NewPCG(a, b))) secvența este reproductibilă.
Ce returnează
Un întreg aleatoriu de tipul din numele funcției.
Exemple
Exemplul 1: Valori aleatorii pe tot domeniul
package main
import (
"fmt"
"math/rand/v2"
)
func main() {
fmt.Println(rand.Int())
fmt.Println(rand.Int32())
fmt.Println(rand.Uint32())
fmt.Printf("%016x\n", rand.Uint64())
}
Rezultat posibil (diferă la fiecare rulare)
13806107213883386
143118352
1435225817
7ad496599c500348
Exemplul 2: Cod de comandă reproductibil
Un generator cu seed fix dă mereu același cod, util în teste. %06d completează cu zerouri la șase cifre.
package main
import (
"fmt"
"math/rand/v2"
)
func main() {
r := rand.New(rand.NewPCG(7, 7))
fmt.Printf("Comanda: RO-%06d\n", r.Int64()%1_000_000)
fmt.Printf("Token: %08x\n", r.Uint32())
fmt.Println("Int() e nenegativ:", r.Int() >= 0)
}
Rezultat
Comanda: RO-452990
Token: 04fb8d80
Int() e nenegativ: true
Greșeli frecvente
- Folosești
rand.Int() % npentru un interval: distribuția nu mai este perfect uniformă. Foloseșterand.IntN(n).
Comenzi înrudite
math/rand/v2.IntN: Returnează un număr întreg aleatoriu din intervalul [0, n): IntN pentru int, plus variantele Int32N, Int64N, UintN, Uint32N, Uint64N.math/rand/v2.N: Funcție generică: returnează o valoare aleatorie din [0, n) de același tip întreg ca n, inclusiv time.Duration.math/rand/v2.Float64: Returnează un număr zecimal aleatoriu uniform din intervalul [0.0, 1.0): Float64 sau Float32.