Go使用github.com/google/uuid生成唯一ID的操作方案

 更新时间:2026年03月10日 09:28:41   作者:程序员爱钓鱼  
这篇文章介绍了Go语言中常用的UUID库github.com/google/uuid,详细讲解了UUID的定义、特点、生成方法、转换、解析、应用场景以及性能情况,需要的朋友可以参考下

在软件开发中,经常需要生成 唯一标识符(UUID)。例如:

  • 用户 ID
  • 订单号
  • 文件唯一标识
  • API 请求 ID
  • 分布式系统对象 ID

在 Go 语言生态中,最常用、最稳定的 UUID 库之一是:

github.com/google/uuid

该库由 Google 维护,广泛应用于各种 Go 项目中。

一、什么是 UUID

UUID(Universally Unique Identifier)是一种通用唯一标识符。

标准由 Internet Engineering Task Force(IETF)定义。

UUID 通常是一个 128 位数字,常见字符串格式为:

550e8400-e29b-41d4-a716-446655440000

结构形式:

8-4-4-4-12

例如:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

UUID 的核心特点:

  • 全球唯一
  • 不依赖中心服务器
  • 可以离线生成
  • 适合分布式系统

二、google/uuid 库介绍

github.com/google/uuid 是 Go 官方生态中最常用的 UUID 库之一。

主要特点:

  • API 简洁
  • 生成速度快
  • 支持多个 UUID 版本
  • 维护稳定
  • 生产环境广泛使用

支持的 UUID 类型:

  • UUID v1(时间 + MAC 地址)
  • UUID v3(基于 MD5)
  • UUID v4(随机)
  • UUID v5(基于 SHA1)

其中使用最多的是:

UUID v4(随机 UUID)。

三、安装库

在 Go 项目中安装:

go get github.com/google/uuid

导入包:

import "github.com/google/uuid"

四、生成随机 UUID(最常用)

UUID v4 是随机生成的 UUID,也是使用最多的一种。

示例代码:

package main

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

func main() {

	id := uuid.New()

	fmt.Println(id)
}

输出示例:

c4d61c4a-1d9f-4c62-b7c8-2d8b7a9e89d1

每次运行都会生成不同的 UUID。

五、UUID 转字符串

如果需要保存到数据库或返回 API,可以转换为字符串。

id := uuid.New()

str := id.String()

fmt.Println(str)

输出:

3d2a9b0b-45fd-4e8c-9c35-d2f5e8d93a12

六、解析 UUID

如果接收到字符串形式的 UUID,可以解析为 UUID 类型。

idStr := "550e8400-e29b-41d4-a716-446655440000"

id, err := uuid.Parse(idStr)

if err != nil {
	panic(err)
}

fmt.Println(id)

解析成功后可以继续使用。

七、生成 UUID v1

UUID v1 基于时间戳和 MAC 地址生成。

示例:

id, err := uuid.NewUUID()
if err != nil {
	panic(err)
}

fmt.Println(id)

特点:

  • 可排序
  • 含时间信息
  • 包含机器标识

但存在隐私问题,因此使用不如 v4 常见。

八、基于名称生成 UUID

UUID v3 和 v5 是基于名称生成的。

适用于:

  • 相同输入生成相同 UUID
  • 数据去重
  • 哈希标识

示例:

id := uuid.NewSHA1(uuid.NameSpaceDNS, []byte("example.com"))

fmt.Println(id)

同样输入将得到相同 UUID。

九、判断 UUID 是否为空

可以检查 UUID 是否为零值。

var id uuid.UUID

if id == uuid.Nil {
	fmt.Println("UUID 为空")
}

uuid.Nil 表示:

00000000-0000-0000-0000-000000000000

十、数据库存储建议

在数据库中存储 UUID 时通常有两种方式:

方式一:字符串

长度:

36 字符

例如:

varchar(36)

优点:

  • 可读性好
  • 调试方便

方式二:二进制

UUID 实际是:

16 bytes

数据库可以存储为:

BINARY(16)

优点:

  • 占用空间小
  • 查询更快

十一、典型应用场景

UUID 在很多系统中都有应用,例如:

用户唯一 ID 订单编号 文件 ID 日志追踪 ID 微服务请求 ID 分布式对象 ID

例如:

requestID := uuid.New().String()

用于 API 日志追踪。

十二、性能情况

UUID v4 的生成速度非常快。

在 Go 中每秒可以生成:

几十万到上百万个 UUID。

因此完全适合:

  • 高并发系统
  • 分布式服务
  • 微服务架构

十三、常见问题

UUID 是否绝对唯一

理论上不是绝对唯一,但概率极低。

UUID v4 的随机空间是:

2^122

几乎不可能重复。

UUID 是否可以排序

普通 UUID v4 不可排序。

如果需要排序,可以使用:

  • UUID v1
  • 或时间排序 ID(例如 Snowflake)。

十四、总结

github.com/google/uuid 是 Go 生态中最常用的 UUID 生成库之一。

主要优点:

  • 官方背景稳定
  • API 简洁
  • 性能优秀
  • 支持多种 UUID 版本

在 Go 项目中,如果需要生成唯一 ID,使用该库可以非常快速地实现稳定可靠的 UUID 方案。

它也是构建分布式系统、微服务架构和高并发系统时的重要基础组件之一。

以上就是Go使用github.com/google/uuid生成唯一ID的操作方案的详细内容,更多关于Go github.com/google/uuid生成唯一ID的资料请关注脚本之家其它相关文章!

相关文章

  • go+react实现远程vCenter虚拟机管理终端方式

    go+react实现远程vCenter虚拟机管理终端方式

    基于Go和React实现远程vSphere vcenter虚拟机终端console页面,提供与vcenter管理中的LaunchWebConsole相同的功能,项目包括前端、后端配置,以及vCenter宿主机的Nginx代理设置
    2026-04-04
  • 在Golang中读写CSV文件的操作指南

    在Golang中读写CSV文件的操作指南

    CSV(逗号分隔值)文件是一种常见的数据存储格式,广泛应用于数据导入、导出、分析和交换等场景,在Golang中,有许多库和工具可以帮助我们读取和写入CSV文件,使数据处理变得简单而高效,本文将深入探讨如何在Golang中使用标准库以及第三方库来读写CSV文件
    2023-11-11
  • Go使用Redis实现分布式锁的常见方法

    Go使用Redis实现分布式锁的常见方法

    Redis 提供了一些原语,可以帮助我们实现高效的分布式锁,下边是使用 Redis 实现分布式锁的一种常见方法,通过代码示例给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-11-11
  • golang 交叉编译C++ dll配置文件的实现

    golang 交叉编译C++ dll配置文件的实现

    本文探讨了在64位环境下调用32位C++ DLL的的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07
  • 通过Golang实现无头浏览器截图

    通过Golang实现无头浏览器截图

    在Web开发中,有时需要对网页进行截图,以便进行页面预览、测试等操作,本文为大家整理了Golang实现无头浏览器的截图的方法,感兴趣的可以了解一下
    2023-05-05
  • golang实践-第三方包为私有库的配置方案

    golang实践-第三方包为私有库的配置方案

    这篇文章主要介绍了golang实践-第三方包为私有库的配置方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Go内置零值标识符zero

    Go内置零值标识符zero

    大家学习和使用 Go 语言时,有一个神奇的概念:零值(zero-values),所以本文想给大家分享一个关于零值的新提案,目测已经八九不离十了
    2023-08-08
  • Win7环境下搭建Go开发环境(基于VSCode编辑器)

    Win7环境下搭建Go开发环境(基于VSCode编辑器)

    这篇文章主要介绍了Win7环境下搭建Go开发环境(基于VSCode编辑器),需要的朋友可以参考下
    2017-02-02
  • golang1.21泛型函数全面讲解

    golang1.21泛型函数全面讲解

    在Go编程语言中,泛型一直是一个备受期待的特性,随着Go 1.21的发布,本文旨在提供Go 1.21中泛型的详细探索,阐明它们的优点、语法、实现和最佳实践,希望对大家有所帮助
    2023-09-09
  • Golang Fasthttp选择使用slice而非map 存储请求数据原理探索

    Golang Fasthttp选择使用slice而非map 存储请求数据原理探索

    本文将从简单到复杂,逐步剖析为什么 Fasthttp 选择使用 slice 而非 map,并通过代码示例解释这一选择背后高性能的原因,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-02-02

最新评论