【go】go多种uuid生产方式

发布时间 2023-03-24 15:24:08作者: opensmarty
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)