瀏覽代碼

changed the String() method for UUID's

Charlie Andrews 11 年之前
父節點
當前提交
9c22f66911
共有 1 個文件被更改,包括 30 次插入2 次删除
  1. 30 2
      uuid.go

+ 30 - 2
uuid.go

@@ -23,6 +23,8 @@ type UUID [16]byte
 
 var hardwareAddr []byte
 var clockSeq uint32
+var hexString = "0123456789abcdef"
+var b1, b2 byte
 
 const (
 	VariantNCSCompat = 0
@@ -146,8 +148,34 @@ func UUIDFromTime(aTime time.Time) UUID {
 // String returns the UUID in it's canonical form, a 32 digit hexadecimal
 // number in the form of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
 func (u UUID) String() string {
-	return fmt.Sprintf("%x-%x-%x-%x-%x",
-		u[0:4], u[4:6], u[6:8], u[8:10], u[10:16])
+	r := make([]byte, 36)
+	for i, b := range u {
+		b1 = hexString[b >> 4]
+		b2 = hexString[b &^ 240]
+		switch {
+		case i < 4:
+			r[i*2] = b1
+			r[(i*2)+1] = b2
+		case i >= 4 && i < 6:
+			r[(i*2)+1] = b1
+			r[(i*2)+2] = b2
+		case i >= 6 && i < 8:
+			r[(i*2)+2] = b1
+			r[(i*2)+3] = b2
+		case i >= 8 && i < 10:
+			r[(i*2)+3] = b1
+			r[(i*2)+4] = b2
+		case i >= 10:
+			r[(i*2)+4] = b1
+			r[(i*2)+5] = b2
+		}
+	}
+	r[8] = '-'
+	r[13] = '-'
+	r[18] = '-'
+	r[23] = '-'
+	return string(r)
+
 }
 
 // Bytes returns the raw byte slice for this UUID. A UUID is always 128 bits