当前位置: 首页 > article >正文

golang 如何生成唯一的 UUID

  • 推荐学习文档
    • golang应用级os框架,欢迎star
    • golang应用级os框架使用案例,欢迎star
    • 案例:基于golang开发的一款超有个性的旅游计划app经历
    • golang实战大纲
    • golang优秀开发常用开源库汇总
    • 想学习更多golang知识,这里有免费的golang学习笔记专栏

文章目录

    • UUID 简介
    • Go 标准库中的实现
    • 使用第三方库github.com/google/uuid
    • 总结

UUID 简介

UUID(通用唯一识别码,Universally Unique Identifier)是一种由数字和字母组成的 128 位标识符。它的目的是在空间和时间上提供全球唯一的标识。UUID 在分布式系统、数据库、微服务架构等众多场景中有着广泛的应用,用于唯一标识资源,如数据库记录、消息、网络节点等。

Go 标准库中的实现

Go 语言的标准库中没有直接提供生成 UUID 的功能,但可以通过组合使用标准库中的功能来生成符合 UUID 标准的唯一标识符。一种常见的方法是使用 crypto/rand 库来生成随机数,并按照 UUID 的格式进行组装。
以下是一个示例代码:

package main

import (
    "crypto/rand"
    "fmt"
)

func generateUUID() string {
    uuid := make([]byte, 16)
    _, err := rand.Read(uuid)
    if err!= nil {
        panic(err)
    }

    // 按照UUID的格式设置版本号(这里设置为版本4,随机UUID)
    uuid[6] = (uuid[6] & 0x0f) | 0x40
    // 设置变体(按照RFC 4122标准)
    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:])
}

在这个代码中:

  • 首先创建了一个长度为 16 字节的字节切片 uuid,这是 UUID 的原始数据表示形式。
  • 使用 rand.Read 函数从加密安全的随机源中读取随机字节填充到 uuid 切片中。如果读取失败,将会发生panic。
  • 然后按照 UUID 版本 4(随机生成的 UUID)的标准设置版本号。将字节 6 的高四位设置为 0100(十六进制的 0x40),表示版本 4。
  • 接着设置变体,将字节 8 的高两位设置为 10(十六进制的 0x80),以符合 RFC 4122 标准中定义的变体。

使用第三方库github.com/google/uuid

除了自己手动实现,Go 社区中也有一些优秀的第三方库可以方便地生成 UUID。其中,github.com/google/uuid 是一个广泛使用的库。

  • 安装
    首先需要安装这个库,可以使用 go get 命令:
     go get github.com/google/uuid
  • 使用示例
    以下是使用这个库生成 UUID 的示例代码:
     package main

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

     func main() {
         id, err := uuid.NewUUID()
         if err!= nil {
             panic(err)
         }
         fmt.Println(id.String())
     }

在这个示例中:

  • 首先导入了 github.com/google/uuid 库。
  • 然后使用 uuid.NewUUID 函数生成一个新的 UUID 对象。如果生成过程中出现错误,将会panic。
  • 最后调用 id.String 方法将 UUID 对象转换为字符串形式并打印出来。

总结

在 Go 语言中,可以通过标准库组合的方式或者使用第三方库来生成唯一的 UUID。如果对代码的简洁性和功能的完整性有较高要求,建议使用 github.com/google/uuid 这样的成熟第三方库;如果想要深入理解 UUID 的生成原理并且对代码体积有严格控制,手动使用标准库实现也是一个不错的选择。无论是哪种方式,生成的 UUID 都可以在各种需要唯一标识符的场景中发挥重要作用,确保数据的唯一性和可识别性。

希望本文对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。

关注我看更多有意思的文章哦!👉👉


http://www.kler.cn/news/324315.html

相关文章:

  • jQuery——属性
  • Webpack教程-概述
  • CF补题第二天
  • 【C++篇】迈入新世界的大门——初识C++(上篇)
  • element下拉框联动 或 多选 回显数据后页面操作不生效问题解决
  • 汇编语言 访问CMOS RAM并打印时间(未完)
  • 6-演员和蓝图
  • 计算机毕业设计 基于Python的热门微博数据可视化分析系统的设计与实现 Python+Django+Vue 可视化大屏 附源码 讲解 文档
  • MySQL—触发器详解
  • vector的模拟实现以及oj题(2)
  • Linux —— Socket编程(二)
  • NetworkPolicy访问控制
  • Windows 开发工具使用技巧
  • PAT甲级1003Emergency
  • 【分布式微服务云原生】10分钟揭秘Dubbo负载均衡:如何让服务调用更智能?
  • 发明专利实用新型专利外观设计专利
  • List几种遍历方法速度
  • 【GUI设计】基于图像分割的GUI系统(3),matlab实现
  • leetcode91. 解码方法,动态规划
  • uniapp设置从右上角到左下角的三种渐变颜色
  • 滚雪球学MySQL[2.1讲]:基础SQL操作
  • 如何使用 Go 获取你的 IP 地址
  • MMD模型及动作一键完美导入UE5-IVP5U插件方案(二)
  • Vue3中的30个高频重点面试题
  • 金镐开源组织成立,增加最新KIT技术,望能为开源添一把火
  • 加法器以及标志位
  • Qt学习笔记
  • HTTP请求过程 part-1
  • 高通Android 12 音量API设置相关代码
  • (undone) MIT6.824 Lecture1 笔记