# rand.Seed() deprecated: way forward.

The `rand.Seed()` function has been deprecated since Go version 1.20:

> Deprecated: As of Go 1.20 there is no reason to call Seed with a random value. Programs that call Seed with a known value to get a specific sequence of results should use New(NewSource(seed)) to obtain a local random generator.

Let's look at the example below:

```go
package util 

import (
	"math/rand"
	"time"
)

func init() {
	rand.Seed(time.Now().UnixNano())
}

// RandomInt generates a random integer between min and max
func RandomInt(min, max int64) int64 {
	return min + rand.Int63n(max-min+1)
}
```

In the above example; The init() function will be called automatically when the package is first used. In this function, we set the seed value for the random generator by calling `rand.Seed()`  
Normally the seed value is often set to the current time. As rand.Seed() expects an `int64` as input, we convert it to unix nano before passing it to the function. (UnixNano a Unix time, the number of nanoseconds elapsed since January 1, 1970 UTC. i.e int64)  
  
But now that rand.Seed() has been deprecated (since Go version 1.20); Let's look at the below example on how we can implement the same.

```go
package util

import (
	"math/rand"
	"time"
)

var randomSource *rand.Rand

func init() {
	randomSource = rand.New(rand.NewSource(time.Now().UnixNano()))
}

// RandomInt generates a random integer between min and max
func RandomInt(min, max int64) int64 {
	return min + randomSource.Int63n(max-min+1)
}
```

`var randomSource *rand.Rand` This line declares a package-level variable named `randomSource` of type `*rand.Rand`. This variable will hold an instance of the `rand.Rand` type, which is used for generating random numbers.  
  
Here, Inside the init():  
`rand.New(...)`: Creates a new `rand.Rand` instance initialised with the source generated by `rand.NewSource(...)`. This `rand.Rand` instance is then assigned to the `randomSource` variable.  
  
And that's how you work with random numbers!
