Can anyone please tell me why the Go example here:
https://tour.golang.org/basics/1
always returns the same value for rand.Intn(10)?
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."
Golang has built-in support for random number generation in the standard library. Specifically there is the math/rand package which implements pseudo-random number generators. Intn returns, as an int, a non-negative pseudo-random number in [0,n) from the default Source.
Go rand. The rand. Intn function returns, as an int, a non-negative pseudo-random number in [0,n) from the default source. The example prints five random integers. To get different pseudo random values, we seed the random generator with time.
Golang provides a package math/rand for generating pseudorandom numbers. This package basically uses a single source that causes the production of a deterministic sequence of values each time a program is executed.
2 reasons:
You have to initalize the global Source
used by rand.Intn()
and other functions of the rand
package using rand.Seed()
. For example:
rand.Seed(time.Now().UnixNano())
See possible duplicate of Difficulty with Go Rand package.
Quoting from package doc of rand
:
Top-level functions, such as Float64 and Int, use a default shared Source that produces a deterministic sequence of values each time a program is run. Use the Seed function to initialize the default Source if different behavior is required for each run.
The Tour runs examples on the Go Playground which caches its output.
See details at Why does count++ (instead of count = count + 1) change the way the map is returned in Golang.
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