赞
踩
我正在学习酷酷的 Golang,可点此查看帖子Golang学习笔记汇总。
UUID(Universally Unique IDentifier)是一个128位数字的唯一标识。
UUID使用16进制表示,共有36个字符(32个字母数字+4个连接符"-"),格式为8-4-4-4-12,如:
6d25a684-9558-11e9-aa94-efccd7a0659b
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
M中使用4位来表示UUID的版本,N中使用1-3位表示不同的variant。如上面所示:M =1, N = a表示此UUID为version-1,variant-1的UUID(Time-based ECE/RFC 4122 UUID)。
但是为什么最开始说它是一个128位的唯一标识呢?这里明明字母位数是(8+4+4+4+12)*8=256位。
因为上面的字母是用的16进制,一个16进制只代表4个bit,所以应该是(8+4+4+4+12)*4=128位。
UUID现有5种版本,是根据不同的使用场景划分的,而不是根据精度,所以Version5并不会比Version1精度高,在精度上,大家都能保证唯一性,重复的概率近乎于0。
V4 是使用最为广泛的。
如果只是需要生成一个唯一ID,你可以使用V1或V4。
如果对于相同的参数需要输出相同的UUID,你可以使用V3或V5。
Package uuid provides a pure Go implementation of Universally Unique Identifiers
(UUID) variant as defined in RFC-4122. This package supports both the creation
and parsing of UUIDs in different formats.
UUID 有 5 种版本,这个库都能完美支持。
直接安装做个测试。
go get github.com/gofrs/uuid
package main import ( "log" "github.com/gofrs/uuid" ) // Create a Version 4 UUID, panicking on error. // Use this form to initialize package-level variables. var u1 = uuid.Must(uuid.NewV4()) func main() { // Create a Version 4 UUID. u2, err := uuid.NewV4() if err != nil { log.Fatalf("failed to generate UUID: %v", err) } log.Printf("generated Version 4 UUID %v", u2) // Parse a UUID from a string. s := "6ba7b810-9dad-11d1-80b4-00c04fd430c8" u3, err := uuid.FromString(s) if err != nil { log.Fatalf("failed to parse UUID %q: %v", s, err) } log.Printf("successfully parsed UUID %v", u3) }
2020/02/23 12:12:46 generated Version 4 UUID 34b0e422-c7be-404a-8861-a543af8393c8
2020/02/23 12:12:46 successfully parsed UUID 6ba7b810-9dad-11d1-80b4-00c04fd430c8
// NewV4 returns a randomly generated UUID.
func NewV4() (UUID, error) {
return DefaultGenerator.NewV4()
}
Generator 提供了5种版本的uuid生成方式。
// Generator provides an interface for generating UUIDs.
type Generator interface {
NewV1() (UUID, error)
NewV2(domain byte) (UUID, error)
NewV3(ns UUID, name string) UUID
NewV4() (UUID, error)
NewV5(ns UUID, name string) UUID
}
Must 是对生成函数的封装,新增了 error 处理。
// Must is a helper that wraps a call to a function returning (UUID, error)
// and panics if the error is non-nil. It is intended for use in variable
// initializations such as
// var packageUUID = uuid.Must(uuid.FromString("123e4567-e89b-12d3-a456-426655440000"))
func Must(u UUID, err error) UUID {
if err != nil {
panic(err)
}
return u
}
// FromString returns a UUID parsed from the input string.
// Input is expected in a form accepted by UnmarshalText.
func FromString(input string) (UUID, error) {
u := UUID{}
err := u.UnmarshalText([]byte(input))
return u, err
}
uuid 包支持5种uuid的生成及解析,最广泛使用的就是生成一个V4版本的 uuid:
u1 = uuid.Must(uuid.NewV4())
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。