func UnmarshalValues(data string) (first, second string, err error) {
	pos := strings.Index(data, delimiter)
	if pos < 0 {
		err = fmt.Errorf("unmarshal values: no delimiter found: '%s'", data)
		return
	}
	l, err := strconv.Atoi(data[:pos])
	if err != nil {
		err = fmt.Errorf("invalid value length: '%s'", data[:pos])
		return
	}
	data = data[pos+1:]
	if l < 0 || l > len(data) {
		err = fmt.Errorf("invalid value length: out of bounds: '%v'", l)
		return
	}
	first = data[:l]
	second = data[l:]
	return
}
UnmarshalValues splits two values from a single string.
This function is chainable to extract multiple values.
package utils
import (
	"crypto/rand"
	"fmt"
	"net/http"
	"strconv"
	"strings"
)
const (
	delimiter = "&"
)
func RandomString(n int) string {
	const alphanum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
	var bytes = make([]byte, n)
	rand.Read(bytes)
	for i, b := range bytes {
		bytes[i] = alphanum[b%byte(len(alphanum))]
	}
	return string(bytes)
}