1 Star 0 Fork 0

kidy-go / utils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
uuid.go 1.42 KB
一键复制 编辑 原始数据 按行查看 历史
kee 提交于 2021-04-30 03:00 . update time and uuid
// str.go kee > 2021/03/18
package uuid
import (
"gitee.com/kidy-go/utils"
"sync/atomic"
"time"
)
type SimpleUUID [16]byte
func New() SimpleUUID {
var (
uid SimpleUUID
clockSeq uint32
hardwareAddr []byte
aTime = time.Now()
)
utcTime := aTime.In(time.UTC)
t := uint64(utcTime.Unix()-utils.TIME_BASE)*10000000 + uint64(utcTime.Nanosecond()/100)
uid[0], uid[1], uid[2], uid[3] = byte(t>>24), byte(t>>16), byte(t>>8), byte(t)
uid[4], uid[5] = byte(t>>40), byte(t>>32)
uid[6], uid[7] = byte(t>>56)&0x0F, byte(t>>48)
clock := atomic.AddUint32(&clockSeq, 1)
uid[8] = byte(clock >> 8)
uid[9] = byte(clock)
copy(uid[10:], hardwareAddr)
uid[6] |= 0x10 // set version to 1 (time based uid)
uid[8] &= 0x3F // clear variant
uid[8] |= 0x80 // set to IETF variant
return uid
}
func Bytes() []byte {
return New().Bytes()
}
func String() string {
return New().String()
}
func ShortString() string {
return New().ShortString()
}
func (u SimpleUUID) Bytes() []byte {
var offsets = [...]int{0, 2, 4, 6, 9, 11, 14, 16, 19, 21, 24, 26, 28, 30, 32, 34}
const hexString = "0123456789abcdef"
r := make([]byte, 36)
for i, b := range u {
r[offsets[i]] = hexString[b>>4]
r[offsets[i]+1] = hexString[b&0xF]
}
r[8] = '-'
r[13] = '-'
r[18] = '-'
r[23] = '-'
return r
}
func (u SimpleUUID) String() string {
return string(u.Bytes())
}
func (u SimpleUUID) ShortString() string {
return string(u.Bytes()[:8])
}
1
https://gitee.com/kidy-go/utils.git
git@gitee.com:kidy-go/utils.git
kidy-go
utils
utils
06b48074ab66

搜索帮助