func Parse(s string) UUID {
	if len(s) == 36+9 {
		if strings.ToLower(s[:9]) != "urn:uuid:" {
			return nil
		}
		s = s[9:]
	} else if len(s) != 36 {
		return nil
	}
	if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' {
		return nil
	}
	uuid := make([]byte, 16)
	for i, x := range []int{
		0, 2, 4, 6,
		9, 11,
		14, 16,
		19, 21,
		24, 26, 28, 30, 32, 34} {
		if v, ok := xtob(s[x:]); !ok {
			return nil
		} else {
			uuid[i] = v
		}
	}
	return uuid
}
Parse decodes s into a UUID or returns nil.  Both the UUID form of
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and
urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx are decoded.
package uuid
import (
	"bytes"
	"crypto/rand"
	"fmt"
	"io"
	"strings"
)
type UUID []byte
type Version byte
type Variant byte
const (
	Invalid   = Variant(iota)  
	RFC4122                    
	Reserved                   
	Microsoft                  
	Future                     
)
var rander = rand.Reader  
func New() string {
	return NewRandom().String()
}