uuid.go 554 B

1234567891011121314151617181920212223242526272829
  1. package uuid
  2. import (
  3. "crypto/rand"
  4. "fmt"
  5. )
  6. // GenerateUUID is used to generate a random UUID
  7. func GenerateUUID() (string, error) {
  8. buf := make([]byte, 16)
  9. if _, err := rand.Read(buf); err != nil {
  10. return "", fmt.Errorf("failed to read random bytes: %v", err)
  11. }
  12. return FormatUUID(buf)
  13. }
  14. func FormatUUID(buf []byte) (string, error) {
  15. if len(buf) != 16 {
  16. return "", fmt.Errorf("wrong length byte slice (%d)", len(buf))
  17. }
  18. return fmt.Sprintf("%08x-%04x-%04x-%04x-%12x",
  19. buf[0:4],
  20. buf[4:6],
  21. buf[6:8],
  22. buf[8:10],
  23. buf[10:16]), nil
  24. }