zoukankan      html  css  js  c++  java
  • 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)
    
    }
  • 相关阅读:
    线性回归模型练习
    《代码整洁之道》读书笔记五
    第八周总结
    第七周总结
    《代码整洁之道》读书笔记四
    《代码整洁之道》读书笔记三
    第六周总结
    《代码整洁之道》读书笔记二
    第五周总结
    HDFS的JavaAPI操作
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/15702598.html
Copyright © 2011-2022 走看看