Generate random numbers, characters and slice elements
yourbasic.org/golang
Go pseudo-random number basics
Use the rand.Seed
and
rand.Int63
functions in package
math/rand
to generate a non-negative pseudo-random number of type int64
:
rand.Seed(time.Now().UnixNano())
n := rand.Int63() // for example 4601851300195147788
Similarly, rand.Float64
generates a pseudo-random float x, where 0 ≤ x < 1:
x := rand.Float64() // for example 0.49893371771268225
Warning: Without an initial call to rand.Seed
, you will get
the same sequence of numbers each time you run the program.
See What’s a seed in a random number generator? for an explanation of pseuodo-random number generators.
Several random sources
The functions in the math/rand
package all use a single random source.
If needed, you can create a new random generator of type Rand
with its own source, and then use its methods to generate random numbers:
generator := rand.New(rand.NewSource(time.Now().UnixNano()))
n := generator.Int63()
x := generator.Float64()
Integers and characters in a given range
Number between a and b
Use rand.Intn(m)
,
which returns a pseudo-random number n, where 0 ≤ n < m.
n := a + rand.Intn(b-a+1) // a ≤ n ≤ b
Character between 'a' and 'z'
c := 'a' + rune(rand.Intn('z'-'a'+1)) // 'a' ≤ c ≤ 'z'
Random element from slice
To generate a character from an arbitrary set, choose a random index from a slice of characters:
chars := []rune("AB⌘")
c := chars[rand.Intn(len(chars))] // for example '⌘'