func (u *UUID) Long() string {
	return u.LongEx("-")
}
Long formats UUID as a sequence of hex digits separated into 5 groups
package uuid
import (
	"crypto/rand"
	"encoding/base32"
	"fmt"
	"strings"
)
type (
	Format int
	UUID [16]byte
)
const (
	FORMAT_UNKNOWN Format = iota
	FORMAT_LONG
	FORMAT_SHORT
)
func New() *UUID {
	uuid := make([]byte, 16)
	_, err := rand.Read(uuid)
	if err != nil {
		panic(fmt.Errorf("error generating uuid: %v", err))
	}
	uuid[8] = uuid[8]&^0xc0 | 0x80
	uuid[6] = uuid[6]&^0xf0 | 0x40
	return b2u(uuid)
}
func NewFromBytes(bytes []byte) *UUID {
	return b2u(bytes)
}
func GetFormat(value string) Format {
	const (
		ValidLongChars  = "0123456789abcdef-"
		ValidShortChars = "abcdefghijklmnopqrstuvwxyz0123456789"
	)
	goto Short
Short:  
	if len(value) == 26 {
		for i := range value {
			if !strings.Contains(ValidShortChars, string(value[i])) {
				goto Long
			}
		}
		return FORMAT_SHORT
	}
Long:  
	if len(value) == 36 {
		for i := range value {
			if !strings.Contains(ValidLongChars, string(value[i])) {
				goto None
			}
		}
		return FORMAT_LONG
	}
None:  
	return FORMAT_UNKNOWN
}
func u2b(u *UUID) []byte {
	b := make([]byte, len(u))
	for i := 0; i < len(b); i++ {
		b[i] = u[i]
	}
	return b
}
func b2u(b []byte) *UUID {
	u := new(UUID)
	for i := 0; i < len(b); i++ {
		u[i] = b[i]
	}
	return u
}
func (u *UUID) Bytes() []byte {
	return u2b(u)
}