UUID简介及 Golang实现

go 实现uuid

简介

UUID 的目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中心节点指定,无需考虑数据库创建时的名称重复问题。

目前最广泛应用的 UUID 是 RFC4122 协议规范的,有时 GUID 也特指是微软对标准 UUID 的实现,其实 RFC4122 的作者之一也是微软员工。

如下,简单介绍各个版本的实现方法。

  • V1 基于时间
    通过当前时间戳、机器 MAC 地址生成,因为 MAC 地址是全球唯一的,从而间接的可以保证 UUID 全球唯一,不过它暴露了电脑的 MAC 地址和生成这个 UUID 的时间,从而一直被诟病。

  • V2 DCE安全
    和基于时间的 UUID 算法相同,但会把时间戳的前 4 位置换为 POSIX 的 UID 或 GID,不过这个版本在 UUID 规范中没有明确指定,基本不会实现。

  • V3 基于命名空间
    由用户指定一个命名空间和一个具体的字符串,然后通过 MD5 散列来生成 UUID 。不过这个版本按照规范描述,主要是是为了向后兼容,所以也很少用到。

  • V4 基于随机数
    根据随机数或者伪随机数生成 UUID ,这个版本也是有意或者无意之中 使用最多 的。

  • V5 基于名字空间
    其实和版本 3 类似,不过散列函数换成了 SHA1



基于 google 的包的实现 安装包

go get -u -v github.com/google/uuid

 

复制代码
package main

import (
    "crypto/md5"
    "fmt"
    "github.com/google/uuid"
    "io"
    "log"
)

func strToMd5(data string) string {
    t := md5.New()
    io.WriteString(t, data)
    return fmt.Sprintf("%x", t.Sum(nil))
}

func main() {
    // V1 基于时间
    u1, err := uuid.NewUUID()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(u1.String())

    //uuid做md5转换
    u4 := uuid.New()
    fmt.Println("uuid v4结果", u4.String()) // a0d99f20-1dd1-459b-b516-dfeca4005203
    c := strToMd5(u4.String())
    fmt.Println("uuid做md5结果", c)

}
复制代码

 

 

 

 

 

 

posted on   星河赵  阅读(1581)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
历史上的今天:
2020-12-17 sublime text3安装插件方法

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示