1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 15:18:01 +00:00
Files
til/go/not-so-random.md
2016-02-14 14:11:10 -06:00

47 lines
1.1 KiB
Markdown

# Not So Random
Go's `rand` package makes it easy to generate all sorts of pseudo-random
numbers. So if you write a program like so:
```go
package main
import "fmt"
import "math/rand"
func main() {
stuff := []string{
"one",
"two",
"three",
"four",
}
fmt.Println(stuff[rand.Intn(len(stuff))])
}
```
and then run it, you will get output like:
```
three
```
and any subsequent runs of the program will continue to produce `three`. This
is because the default seed for global functions in `math/rand` is
[specified](https://golang.org/pkg/math/rand/#Seed) as `1`.
If you want your program to be a little less predictable, you will want to
seed it yourself, perhaps with the current time, instead of `1`. Try adding
the following to the beginning of the `main` function:
```go
rand.Seed(time.Now().UTC().UnixNano())
```
You'll also want to import the `time` package.
Things should *appear* to be a bit more random now.
source: [Jake Worth](https://twitter.com/jwworth) and
[Stackoverflow](http://stackoverflow.com/questions/12321133/golang-random-number-generator-how-to-seed-properly)