Skip to content

Latest commit

 

History

History
49 lines (39 loc) · 948 Bytes

deterministically-seed-a-random-number-generator.md

File metadata and controls

49 lines (39 loc) · 948 Bytes

Deterministically Seed A Random Number Generator

If you need a random number in Go, you can always reach for the various functions in the rand package.

package main

import (
	"fmt"
	"math/rand"
)

func main() {
	for range 5 {
		roll := rand.Intn(6) + 1
		fmt.Printf("- %d\n", roll)
	}
}

Each time I run that, I get a random set of values. Often in programming, we want some control over the randomness. We want to seed the randomness so that it is deterministic. We want random, but the kind of random where we know how we got there.

package main

import (
	"fmt"
	"math/rand"
)

func main() {
	seed := int64(123)
	src := rand.NewSource(seed)
	rng := rand.New(src)

	for range 5 {
		roll := rng.Intn(6) + 1
		fmt.Printf("- %d\n", roll)
	}
}

In this second snippet, we create a Source with a specific seed value that we can use with a custom Rand struct. We can then deterministically get random numbers from it.