`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)*
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
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.

The pages are generated with Golds v0.6.9-preview. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |