package rand

Import Path
	math/rand/v2 (on go.dev)

Dependency Relation
	imports 6 packages, and imported by 2 packages

Involved Source Files chacha8.go exp.go normal.go pcg.go Package rand implements pseudo-random number generators suitable for tasks such as simulation, but it should not be used for security-sensitive work. Random numbers are generated by a [Source], usually wrapped in a [Rand]. Both types should be used by a single goroutine at a time: sharing among multiple goroutines requires some kind of synchronization. Top-level functions, such as [Float64] and [Int], are safe for concurrent use by multiple goroutines. This package's outputs might be easily predictable regardless of how it's seeded. For random numbers suitable for security-sensitive work, see the [crypto/rand] package. zipf.go
Code Examples { answers := []string{ "It is certain", "It is decidedly so", "Without a doubt", "Yes definitely", "You may rely on it", "As I see it yes", "Most likely", "Outlook good", "Yes", "Signs point to yes", "Reply hazy try again", "Ask again later", "Better not tell you now", "Cannot predict now", "Concentrate and ask again", "Don't count on it", "My reply is no", "My sources say no", "Outlook not so good", "Very doubtful", } fmt.Println("Magic 8-Ball says:", answers[rand.IntN(len(answers))]) } { fmt.Println(rand.IntN(100)) fmt.Println(rand.IntN(100)) fmt.Println(rand.IntN(100)) } { fmt.Println(rand.N(int64(100))) time.Sleep(rand.N(100 * time.Millisecond)) } { for _, value := range rand.Perm(3) { fmt.Println(value) } } { words := strings.Fields("ink runs from the corners of my mouth") rand.Shuffle(len(words), func(i, j int) { words[i], words[j] = words[j], words[i] }) fmt.Println(words) } { numbers := []byte("12345") letters := []byte("ABCDE") rand.Shuffle(len(numbers), func(i, j int) { numbers[i], numbers[j] = numbers[j], numbers[i] letters[i], letters[j] = letters[j], letters[i] }) for i := range numbers { fmt.Printf("%c: %c\n", letters[i], numbers[i]) } } { r := rand.New(rand.NewPCG(1, 2)) w := tabwriter.NewWriter(os.Stdout, 1, 1, 1, ' ', 0) defer w.Flush() show := func(name string, v1, v2, v3 any) { fmt.Fprintf(w, "%s\t%v\t%v\t%v\n", name, v1, v2, v3) } show("Float32", r.Float32(), r.Float32(), r.Float32()) show("Float64", r.Float64(), r.Float64(), r.Float64()) show("ExpFloat64", r.ExpFloat64(), r.ExpFloat64(), r.ExpFloat64()) show("NormFloat64", r.NormFloat64(), r.NormFloat64(), r.NormFloat64()) show("Int32", r.Int32(), r.Int32(), r.Int32()) show("Int64", r.Int64(), r.Int64(), r.Int64()) show("Uint32", r.Uint32(), r.Uint32(), r.Uint32()) show("IntN(10)", r.IntN(10), r.IntN(10), r.IntN(10)) show("Int32N(10)", r.Int32N(10), r.Int32N(10), r.Int32N(10)) show("Int64N(10)", r.Int64N(10), r.Int64N(10), r.Int64N(10)) show("Perm", r.Perm(5), r.Perm(5), r.Perm(5)) }
Package-Level Type Names (total 5)
/* sort by: | */
A ChaCha8 is a ChaCha8-based cryptographically strong random number generator. MarshalBinary implements the encoding.BinaryMarshaler interface. Read reads exactly len(p) bytes into p. It always returns len(p) and a nil error. If calls to Read and Uint64 are interleaved, the order in which bits are returned by the two is undefined, and Read may return bits generated before the last call to Uint64. Seed resets the ChaCha8 to behave the same way as NewChaCha8(seed). Uint64 returns a uniformly distributed random uint64 value. UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. *ChaCha8 : Source *ChaCha8 : encoding.BinaryMarshaler *ChaCha8 : encoding.BinaryUnmarshaler *ChaCha8 : io.Reader func NewChaCha8(seed [32]byte) *ChaCha8
A PCG is a PCG generator with 128 bits of internal state. A zero PCG is equivalent to NewPCG(0, 0). MarshalBinary implements the encoding.BinaryMarshaler interface. Seed resets the PCG to behave the same way as NewPCG(seed1, seed2). Uint64 return a uniformly-distributed random uint64 value. UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. *PCG : Source *PCG : encoding.BinaryMarshaler *PCG : encoding.BinaryUnmarshaler func NewPCG(seed1, seed2 uint64) *PCG
A Rand is a source of random numbers. ExpFloat64 returns an exponentially distributed float64 in the range (0, +math.MaxFloat64] with an exponential distribution whose rate parameter (lambda) is 1 and whose mean is 1/lambda (1). To produce a distribution with a different rate parameter, callers can adjust the output using: sample = ExpFloat64() / desiredRateParameter Float32 returns, as a float32, a pseudo-random number in the half-open interval [0.0,1.0). Float64 returns, as a float64, a pseudo-random number in the half-open interval [0.0,1.0). Int returns a non-negative pseudo-random int. Int32 returns a non-negative pseudo-random 31-bit integer as an int32. Int32N returns, as an int32, a non-negative pseudo-random number in the half-open interval [0,n). It panics if n <= 0. Int64 returns a non-negative pseudo-random 63-bit integer as an int64. Int64N returns, as an int64, a non-negative pseudo-random number in the half-open interval [0,n). It panics if n <= 0. IntN returns, as an int, a non-negative pseudo-random number in the half-open interval [0,n). It panics if n <= 0. NormFloat64 returns a normally distributed float64 in the range -math.MaxFloat64 through +math.MaxFloat64 inclusive, with standard normal distribution (mean = 0, stddev = 1). To produce a different normal distribution, callers can adjust the output using: sample = NormFloat64() * desiredStdDev + desiredMean Perm returns, as a slice of n ints, a pseudo-random permutation of the integers in the half-open interval [0,n). Shuffle pseudo-randomizes the order of elements. n is the number of elements. Shuffle panics if n < 0. swap swaps the elements with indexes i and j. Uint returns a pseudo-random uint. Uint32 returns a pseudo-random 32-bit value as a uint32. Uint32N returns, as a uint32, a non-negative pseudo-random number in the half-open interval [0,n). It panics if n == 0. Uint64 returns a pseudo-random 64-bit value as a uint64. Uint64N returns, as a uint64, a non-negative pseudo-random number in the half-open interval [0,n). It panics if n == 0. UintN returns, as a uint, a non-negative pseudo-random number in the half-open interval [0,n). It panics if n == 0. *Rand : Source func New(src Source) *Rand func NewZipf(r *Rand, s float64, v float64, imax uint64) *Zipf
A Source is a source of uniformly-distributed pseudo-random uint64 values in the range [0, 1<<64). A Source is not safe for concurrent use by multiple goroutines. ( Source) Uint64() uint64 *ChaCha8 *PCG *Rand *Zipf *math/rand.Rand math/rand.Source64 (interface) *math/rand.Zipf *math/big.Int *internal/pkgbits.Decoder internal/trace.Value log/slog.Value runtime/metrics.Value func New(src Source) *Rand
A Zipf generates Zipf distributed variates. Uint64 returns a value drawn from the Zipf distribution described by the Zipf object. *Zipf : Source func NewZipf(r *Rand, s float64, v float64, imax uint64) *Zipf
Package-Level Functions (total 23)
ExpFloat64 returns an exponentially distributed float64 in the range (0, +math.MaxFloat64] with an exponential distribution whose rate parameter (lambda) is 1 and whose mean is 1/lambda (1) from the default Source. To produce a distribution with a different rate parameter, callers can adjust the output using: sample = ExpFloat64() / desiredRateParameter
Float32 returns, as a float32, a pseudo-random number in the half-open interval [0.0,1.0) from the default Source.
Float64 returns, as a float64, a pseudo-random number in the half-open interval [0.0,1.0) from the default Source.
Int returns a non-negative pseudo-random int from the default Source.
Int32 returns a non-negative pseudo-random 31-bit integer as an int32 from the default Source.
Int32N returns, as an int32, a pseudo-random number in the half-open interval [0,n) from the default Source. It panics if n <= 0.
Int64 returns a non-negative pseudo-random 63-bit integer as an int64 from the default Source.
Int64N returns, as an int64, a pseudo-random number in the half-open interval [0,n) from the default Source. It panics if n <= 0.
IntN returns, as an int, a pseudo-random number in the half-open interval [0,n) from the default Source. It panics if n <= 0.
Type Parameters: Int: intType N returns a pseudo-random number in the half-open interval [0,n) from the default Source. The type parameter Int can be any integer type. It panics if n <= 0.
New returns a new Rand that uses random values from src to generate other random values.
NewChaCha8 returns a new ChaCha8 seeded with the given seed.
NewPCG returns a new PCG seeded with the given values.
NewZipf returns a Zipf variate generator. The generator generates values k ∈ [0, imax] such that P(k) is proportional to (v + k) ** (-s). Requirements: s > 1 and v >= 1.
NormFloat64 returns a normally distributed float64 in the range [-math.MaxFloat64, +math.MaxFloat64] with standard normal distribution (mean = 0, stddev = 1) from the default Source. To produce a different normal distribution, callers can adjust the output using: sample = NormFloat64() * desiredStdDev + desiredMean
Perm returns, as a slice of n ints, a pseudo-random permutation of the integers in the half-open interval [0,n) from the default Source.
Shuffle pseudo-randomizes the order of elements using the default Source. n is the number of elements. Shuffle panics if n < 0. swap swaps the elements with indexes i and j.
Uint returns a pseudo-random uint from the default Source.
Uint32 returns a pseudo-random 32-bit value as a uint32 from the default Source.
Uint32N returns, as a uint32, a pseudo-random number in the half-open interval [0,n) from the default Source. It panics if n <= 0.
Uint64 returns a pseudo-random 64-bit value as a uint64 from the default Source.
Uint64N returns, as a uint64, a pseudo-random number in the half-open interval [0,n) from the default Source. It panics if n <= 0.
UintN returns, as a uint, a pseudo-random number in the half-open interval [0,n) from the default Source. It panics if n <= 0.