Is there any Go function which returns true pseudo random number in every run? What I actually mean is, consider following code,
package main
import (
"fmt"
"rand"
)
func main() {
fmt.Println(rand.Int31n(100))
}
Every time I execute this code, I get the same output. Is there a method that will return different, random results each time that it is called?
Intn(n) The rand. Intn() function accepts a number n and returns an unsigned pseudorandom integer in the interval [0, n) . It will throw an error if the value of n is less than zero.
Intn(10)? The note on the side says why it is that way: "Note: the environment in which these programs are executed is deterministic, so each time you run the example program rand. Intn will return the same number."
The rand. Intn function returns, as an int, a non-negative pseudo-random number in [0,n) from the default source. five_random.go. package main import ( "fmt" "math/rand" "time" ) func init() { rand.Seed(time.Now().UnixNano()) } func main() { for i := 0; i < 5; i++ { fmt.Printf("%d ", rand.Intn(20)) } fmt.Println() }
A Rand is a source of random numbers.
The package rand can be used to generate pseudo random numbers, which are generated based on a specific initial value (called "seed").
A popular choice for this initial seed is for example the current time in nanoseconds - a value which will probably differ when you execute your program multiple times. You can initialize the random generator with the current time with something like this:
rand.Seed(time.Now().UnixNano())
(don't forget to import the time package for that)
There is also another package called crypto/rand which can be used to generate better random values (this generator might also take the user's mouse movements, the current heat of the processor and a lot of other factors into account). However, the functions in this package are several times slower and, unless you don't write a pass-phrase generator (or other security related stuff), the normal rand package is probably fine.
You have to seed the RNG first.
I've never used Go, but it's probably rand.Seed(x);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With