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的库即可满足需求。

