github.com/glide-im/glide@v1.6.0/pkg/gate/id.go (about) 1 package gate 2 3 import ( 4 "encoding/hex" 5 "io" 6 "math/rand" 7 "time" 8 ) 9 10 // GenTempID generates a temporary ID. 11 // ID implementation is a UUID v4, which is generated by random number generator. 12 func GenTempID(gateID string) (ID, error) { 13 uuid, err := newUUID() 14 if err != nil { 15 return "", err 16 } 17 return NewID(gateID, tempIdPrefix+uuid, ""), nil 18 } 19 20 func newUUID() (string, error) { 21 var uuid [16]byte 22 r := rand.New(rand.NewSource(time.Now().UnixNano())) 23 _, err := io.ReadFull(r, uuid[:]) 24 if err != nil { 25 return "", err 26 } 27 uuid[6] = (uuid[6] & 0x0f) | 0x40 28 uuid[8] = (uuid[8] & 0x3f) | 0x80 29 30 var buf1 [36]byte 31 buf := buf1[:] 32 hex.Encode(buf, uuid[:4]) 33 buf[8] = '-' 34 hex.Encode(buf[9:13], uuid[4:6]) 35 buf[13] = '-' 36 hex.Encode(buf[14:18], uuid[6:8]) 37 buf[18] = '-' 38 hex.Encode(buf[19:23], uuid[8:10]) 39 buf[23] = '-' 40 hex.Encode(buf[24:], uuid[10:]) 41 return string(buf[:]), nil 42 }