【go】go多种uuid生产方式
package main import ( "fmt" "github.com/chilts/sid" "github.com/kjk/betterguid" "github.com/oklog/ulid" "github.com/rs/xid" "github.com/satori/go.uuid" "github.com/segmentio/ksuid" "github.com/sony/sonyflake" "log" "math/rand" "time" ) func genXid() { id := xid.New() fmt.Printf("github.com/rs/xid: %s\n", id.String()) } func genKsuid() { id := ksuid.New() fmt.Printf("github.com/segmentio/ksuid: %s\n", id.String()) } func genBetterGUID() { id := betterguid.New() fmt.Printf("github.com/kjk/betterguid: %s\n", id) } func genUlid() { t := time.Now().UTC() entropy := rand.New(rand.NewSource(t.UnixNano())) id := ulid.MustNew(ulid.Timestamp(t), entropy) fmt.Printf("github.com/oklog/ulid: %s\n", id.String()) } func genSonyflake() { flake := sonyflake.NewSonyflake(sonyflake.Settings{}) id, err := flake.NextID() if err != nil { log.Fatalf("flake.NextID() failed with %s\n", err) } fmt.Printf("github.com/sony/sonyflake: %x\n", id) } func genSid() { id := sid.Id() fmt.Printf("github.com/chilts/sid: %s\n", id) } func genUUIDv4() { id,err := uuid.NewV4() if err != nil { fmt.Printf("get uuid error [%s]",err) } fmt.Printf("github.com/satori/go.uuid: %s\n", id) } func main() { genXid() genKsuid() genBetterGUID() genUlid() genSonyflake() genSid() genUUIDv4() }
我们可以使用github上的一些现成的包使用[satori]https://github.com/satori/go.uuid)
简单使用如下:
go get github.com/satori/go.uuid
package main import ( "fmt" "github.com/satori/go.uuid" ) func main() { // Creating UUID Version 4 // panic on error u1 := uuid.Must(uuid.NewV4()) fmt.Printf("UUIDv4: %s\n", u1) // or error handling u2, err := uuid.NewV4() if err != nil { fmt.Printf("Something went wrong: %s", err) return } fmt.Printf("UUIDv4: %s\n", u2) // Parsing UUID from string input u2, err := uuid.FromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8") if err != nil { fmt.Printf("Something went wrong: %s", err) return } fmt.Printf("Successfully parsed: %s", u2) }
【参考链接】
go工具库分析——go-snowflake
go-snowflake: Go 语言实现的 Snowflake 算法,为分布式系统生成唯一ID,单机测试1秒可生成20万ID。 (gitee.com)