All the integer functions in math/rand
generate non-negative numbers.
rand.Int() int // [0, MaxInt]
rand.Int31() int32 // [0, MaxInt32]
rand.Int31n(n int32) int32 // [0, n)
rand.Int63() int64 // [0, MaxInt64]
rand.Int63n(n int64) int64 // [0, n)
rand.Intn(n int) int // [0, n)
I would like to generate random numbers in the range [-m, n). In other words, I would like to generate a mix of positive and negative numbers.
For Go 1.22+:
Use the math/rand/v2
package.
import "math/rand/v2"
func randRange(min, max int) int {
return rand.IntN(max-min) + min
}
For Go 1.21 and earlier:
import "math/rand"
func randRange(min, max int) int {
return rand.Intn(max-min) + min
}
Please note that this returns numbers in the range [min, max), meaning that max
is never returned. For example, randRange(1, 3)
would return 1
and 2
only. It would never return 3
. If you want numbers in the range [min, max], just add 1
as shown below:
return rand.IntN(max+1-min) + min