Yami Odymel https://invade.tw/ says to OwO
// FromStringOrNil returns UUID parsed from string input. // Same behavior as FromString, but returns a Nil UUID on error. func FromStringOrNil(input string) UUID { uuid, err := FromString(input) if err != nil { return Nil } return uuid } // Returns UUID v1/v2 storage state. // Returns epoch timestamp, clock sequence, and hardware address. func getStorage() (uint64, uint16, []byte) { storageOnce.Do(initStorage) storageMutex.Lock() defer storageMutex.Unlock() timeNow := epochFunc() // Clock changed backwards since last UUID generation. // Should increase clock sequence. if timeNow <= lastTime { clockSequence++ } lastTime = timeNow return timeNow, clockSequence, hardwareAddr[๐Ÿ˜ } // NewV1 returns UUID based on current timestamp and MAC address. func NewV1() UUID { u := UUID{} timeNow, clockSeq, hardwareAddr := getStorage() binary.BigEndian.PutUint32(u[0๐Ÿ˜, uint32(timeNow)) binary.BigEndian.PutUint16(u[4๐Ÿ˜, uint16(timeNowยป32)) binary.BigEndian.PutUint16(u[6๐Ÿ˜, uint16(timeNowยป48)) binary.BigEndian.PutUint16(u[8๐Ÿ˜, clockSeq) copy(u[10๐Ÿ˜, hardwareAddr) u.SetVersion(1) u.SetVariant() return u } // NewV2 returns DCE Security UUID based on POSIX UID/GID. func NewV2(domain byte) UUID { u := UUID{} timeNow, clockSeq, hardwareAddr := getStorage() switch domain { case DomainPerson: binary.BigEndian.PutUint32(u[0๐Ÿ˜, posixUID) case DomainGroup: binary.BigEndian.PutUint32(u[0๐Ÿ˜, posixGID) } binary.BigEndian.PutUint16(u[4๐Ÿ˜, uint16(timeNowยป32)) binary.BigEndian.PutUint16(u[6๐Ÿ˜, uint16(timeNowยป48)) binary.BigEndian.PutUint16(u[8๐Ÿ˜, clockSeq) u[9] = domain copy(u[10๐Ÿ˜, hardwareAddr) u.SetVersion(2) u.SetVariant() return u } // NewV3 returns UUID based on MD5 hash of namespace UUID and name. func NewV3(ns UUID, name string) UUID { u := newFromHash(md5.New(), ns, name) u.SetVersion(3) u.SetVariant() return u } // NewV4 returns random generated UUID. func NewV4() UUID { u := UUID{} safeRandom(u[๐Ÿ˜) u.SetVersion(4) u.SetVariant() return u } // NewV5 returns UUID based on SHA-1 hash of namespace UUID and name. func NewV5(ns UUID, name string) UUID { u := newFromHash(sha1.New(), ns, name) u.SetVersion(5) u.SetVariant() return u } // Returns UUID based on hashing of namespace UUID and name. func newFromHash(h hash.Hash, ns UUID, name string) UUID { u := UUID{} h.Write(ns[๐Ÿ˜) h.Write([]byte(name)) copy(u[๐Ÿ˜, h.Sum(nil)) return u } func main(){ u1 := uuid.NewV4() fmt.Printf("UUIDv4: %s\n", u1) }