← Back to all TILs

Deterministically Seed A Random Number Generator

go Written December 22, 2024

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.

Other posts like this