# Go Cheatsheet - Random

## Random

### Pseudo Random Function

Use `math/rand`

```go
package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	num := rand.Int()
	fmt.Println("Random Integer:", num)

	// generate a number [0, 100)
	num = rand.Intn(100)
	fmt.Println("Random Integer:", num)

	// generate a float number
	fnum := rand.Float32()
	fmt.Println("Random Float:", fnum)

	// set seed then generate
	seed := rand.NewSource(time.Now().UnixNano())
	r1 := rand.New(seed)
	num = r1.Intn(100)
	fmt.Println("Random Integer:", num)
}
```

### Crypto secure random

Use `crypto/rand`

```go
package main

import (
	"crypto/rand"
	"encoding/hex"
	"fmt"
	"math/big"
)

func main() {
	// generate random integer <100
	num, _ := rand.Int(rand.Reader, big.NewInt(100))
	fmt.Println("Random Integer", num.Int64())

	// generate random string
	fmt.Println(genRandString(8))
	fmt.Println(genRandString(16))
}

func genRandString(size int) string {
	b := make([]byte, size)
	rand.Read(b)
	return hex.EncodeToString(b)
}
```

### Generate UUID4

Use `uuid` package:

```bash
$ go get github.com/google/uuid
```

```go
import (
    "encoding/hex"

    "github.com/google/uuid"
)

func genUUID4() string {
	uuid4, _ := uuid.NewRandom()
	bin, _ := uuid4.MarshalBinary()
	return hex.EncodeToString(bin)
}
```
