func Read(p []byte) (n int, err error) {
	n, err = globalRand.Read(p)
	if err != nil {
		return n, fmt.Errorf("read: %w", err)
	}
	return n, nil
}
Read generates len(p) random bytes from the default Source and
writes them into p. It always returns len(p) and a nil error.
Read, unlike the Rand.Read method, is safe for concurrent use.
package rand
import (
	"fmt"
	"math/rand"
	"sync"
	"time"
)
func init() {
	rand.Seed(time.Now().Unix())
}
var (
	globalSource = lockedSource{src: rand.NewSource(time.Now().UnixNano()).(rand.Source64)}
	globalRand   = rand.New(&globalSource)
	letterRunes  = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
)
func Seed(seed int64) { globalRand.Seed(seed) }
func Int63() int64 { return globalRand.Int63() }
func Uint32() uint32 { return globalRand.Uint32() }
func Uint64() uint64 { return globalRand.Uint64() }
func Int31() int32 { return globalRand.Int31() }
func Int() int { return globalRand.Int() }
func Int63n(n int64) int64 { return globalRand.Int63n(n) }
func Int31n(n int32) int32 { return globalRand.Int31n(n) }
func Intn(n int) int { return globalRand.Intn(n) }
func Float64() float64 { return globalRand.Float64() }
func Float32() float32 { return globalRand.Float32() }
func Perm(n int) []int { return globalRand.Perm(n) }
func Shuffle(n int, swap func(i, j int)) { globalRand.Shuffle(n, swap) }