Bladeren bron

This is a library, so don't panic if rand can't be read; return an error
instead.

Add a separate formatting function.

Jeff Mitchell 10 jaren geleden
bovenliggende
commit
132dbc4ad1
2 gewijzigde bestanden met toevoegingen van 19 en 5 verwijderingen
  1. 11 3
      uuid.go
  2. 8 2
      uuid_test.go

+ 11 - 3
uuid.go

@@ -6,10 +6,18 @@ import (
 )
 
 // GenerateUUID is used to generate a random UUID
-func GenerateUUID() string {
+func GenerateUUID() (string, error) {
 	buf := make([]byte, 16)
 	if _, err := rand.Read(buf); err != nil {
-		panic(fmt.Errorf("failed to read random bytes: %v", err))
+		return "", fmt.Errorf("failed to read random bytes: %v", err)
+	}
+
+	return FormatUUID(buf)
+}
+
+func FormatUUID(buf []byte) (string, error) {
+	if len(buf) != 16 {
+		return "", fmt.Errorf("wrong length byte slice (%d)", len(buf))
 	}
 
 	return fmt.Sprintf("%08x-%04x-%04x-%04x-%12x",
@@ -17,5 +25,5 @@ func GenerateUUID() string {
 		buf[4:6],
 		buf[6:8],
 		buf[8:10],
-		buf[10:16])
+		buf[10:16]), nil
 }

+ 8 - 2
uuid_test.go

@@ -6,9 +6,15 @@ import (
 )
 
 func TestGenerateUUID(t *testing.T) {
-	prev := GenerateUUID()
+	prev, err := GenerateUUID()
+	if err != nil {
+		t.Fatal(err)
+	}
 	for i := 0; i < 100; i++ {
-		id := GenerateUUID()
+		id, err := GenerateUUID()
+		if err != nil {
+			t.Fatal(err)
+		}
 		if prev == id {
 			t.Fatalf("Should get a new ID!")
 		}