Golang UUID生成方案

在Golang项目中需要生成UUID,目前了解到有几种不同的实现方案,比如使用github.com/google/uuid、github.com/satori/go.uuid等第三方库。想请教各位:

  1. 这些库在性能和使用体验上有什么区别?哪个更推荐在生产环境使用?
  2. 生成的UUID版本(v1/v4)在实际应用中该如何选择?
  3. 有没有遇到过UUID冲突的情况?在分布式系统中如何降低冲突概率?
  4. 标准库中有没有计划加入原生UUID支持?

希望能得到一些实际项目中的经验分享,谢谢!

2 回复

Golang中推荐使用github.com/google/uuid库生成UUID。安装:go get github.com/google/uuid。使用示例:

import "github.com/google/uuid"

id := uuid.New() // 生成UUID v4

简单高效,支持多种UUID版本。

更多关于Golang UUID生成方案的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,生成UUID(通用唯一识别码)有多种方案。以下是几种常用方法:

1. 使用 google/uuid 库(推荐)

这是最常用的UUID生成方案:

package main

import (
    "fmt"
    "github.com/google/uuid"
)

func main() {
    // 生成UUID v4(随机)
    id := uuid.New()
    fmt.Println("UUID v4:", id)
    
    // 生成UUID v1(基于时间)
    idV1, _ := uuid.NewUUID()
    fmt.Println("UUID v1:", idV1)
    
    // 生成UUID v4(字符串形式)
    idStr := uuid.New().String()
    fmt.Println("UUID string:", idStr)
    
    // 解析UUID
    parsedUUID, err := uuid.Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
    if err == nil {
        fmt.Println("Parsed UUID:", parsedUUID)
    }
}

安装依赖:

go get github.com/google/uuid

2. 使用 gofrs/uuid 库

package main

import (
    "fmt"
    "github.com/gofrs/uuid"
)

func main() {
    // 生成UUID v4
    id, err := uuid.NewV4()
    if err != nil {
        panic(err)
    }
    fmt.Println("UUID:", id)
    
    // 生成UUID v1
    idV1, _ := uuid.NewV1()
    fmt.Println("UUID v1:", idV1)
}

3. 标准库方案(不推荐用于生产)

package main

import (
    "crypto/rand"
    "fmt"
    "io"
)

func generateUUID() string {
    uuid := make([]byte, 16)
    _, err := io.ReadFull(rand.Reader, uuid)
    if err != nil {
        panic(err)
    }
    
    // 设置版本号(UUID v4)
    uuid[6] = (uuid[6] & 0x0f) | 0x40
    uuid[8] = (uuid[8] & 0x3f) | 0x80
    
    return fmt.Sprintf("%x-%x-%x-%x-%x", 
        uuid[0:4], uuid[4:6], uuid[6:8], uuid[8:10], uuid[10:])
}

func main() {
    fmt.Println("Custom UUID:", generateUUID())
}

推荐方案

首选 google/uuid 库,因为:

  • 性能优秀
  • API简洁易用
  • 社区维护活跃
  • 支持多种UUID版本
  • 包含完整的解析和验证功能

对于大多数应用场景,使用UUID v4(随机生成)即可满足需求。

回到顶部