math/rand/v2.Int în Go

Returnează un întreg aleatoriu pe tot domeniul tipului: Int, Int32, Int64 (nenegative) și Uint, Uint32, Uint64.

Sintaxă
import "math/rand/v2"

func Int() int
func Int32() int32
func Int64() int64
func Uint() uint
func Uint32() uint32
func Uint64() uint64

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() % n pentru un interval: distribuția nu mai este perfect uniformă. Folosește rand.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.