在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(随机生成)即可满足需求。