Golang UUID生成方法

在Golang中如何生成UUID?目前项目中需要用到唯一标识符,想了解标准库或常用第三方库中生成UUID的最佳实践。能否提供几种不同版本的UUID生成示例(如v1、v4)?另外生成UUID时需要注意哪些性能和安全问题?

2 回复

Golang中生成UUID推荐使用第三方库,如github.com/google/uuid

import "github.com/google/uuid"

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

或者使用标准库crypto/rand手动生成,但更推荐使用成熟的三方库。

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


在Golang中,生成UUID主要有以下几种方法:

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

这是最常用的方法,由Google维护,简单高效。

安装:

go get github.com/google/uuid

代码示例:

package main

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

func main() {
    // 生成UUID v4(随机)
    id := uuid.New()
    fmt.Println("UUID v4:", id)

    // 生成UUID v1(基于时间戳和MAC地址)
    idV1 := uuid.NewUUID()
    fmt.Println("UUID v1:", idV1)

    // 从字符串解析UUID
    parsedUUID, err := uuid.Parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
    if err != nil {
        panic(err)
    }
    fmt.Println("Parsed UUID:", parsedUUID)
}

2. 使用标准库 crypto/rand(手动实现)

如果需要轻量级实现且不依赖第三方库:

package main

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

func main() {
    uuid := make([]byte, 16)
    _, err := io.ReadFull(rand.Reader, uuid)
    if err != nil {
        panic(err)
    }
    
    // 设置UUID版本和变体
    uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4
    uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10
    
    fmt.Printf("UUID: %x-%x-%x-%x-%x\n", 
        uuid[0:4], uuid[4:6], uuid[6:8], uuid[8:10], uuid[10:])
}

3. 其他第三方库

  • github.com/gofrs/uuid:另一个流行的UUID库
  • github.com/satori/go.uuid:已不再维护,不推荐使用

总结

  • 推荐使用 github.com/google/uuid,功能完整且维护良好
  • 支持多种UUID版本(v1、v3、v4、v5)
  • 包含解析、验证等实用功能
  • 性能优秀,生产环境验证

选择时根据项目需求决定,大多数情况下直接使用Google的库即可满足需求。

回到顶部