google/uuid

UUID全称Universally Unique IDentifier,由4个连字符-将一个32字节长(32个十六进制数组成)的字符串分割为5段,共计36字节长128位的字符串。

例如:

550e8400-e29b-41d4-a716-446655440000

UUID的目的是让分布式系统中所有元素都具有唯一的辨识信息,而无需通过中心节点指定,同时无需考虑数据创建时的名称重复问题。目前最广泛使用的UUID是RFC4122协议。

UUID实现中,GUID特指微软对标准UUID的实现。MySQL中可使用UUID()函数来生成,可使用CHAR(36)BINARY(36)来存储。

> SELECT UUID();
7c8a38b5-6490-11ec-9251-f43909452c6f

为保证UUID的唯一性,RFC4122规范定义了包括网卡MAC地址、时间戳、命名空间、随机、伪随机、时序等元素,以及从这些元素中生成UUID的算法。UUID的复杂特性在保证其唯一性同时,意味着也只能通过计算机来生成。

版本描述
v1基于时间,通过当前时间戳、机器MAC地址生成,MAC全球唯一但会暴露存在风险。
v2DCE安全,和v1算法相同,但将时间戳前4位置换为POSIX的UID或GID。
v3基于命名空间,由用户指定一个命名空间和一个具体的字符串,通过MD5散列生成。
v4基于随机数,根据随机数或伪随机数生成。
v5基于名字空间,类似v3不过散列函数换成了SHA1。

uuidgen

Linux系统中可使用系统命令/usr/bin/uuidgen来生成UUID

$ /usr/bin/uuid

Golang可借助于exec.Command来执行uuidgen命令来生成

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main(){
    out,err := exec.Command("uuidgen").Output()
    if err!=nil {
        log.Fatal(err)
    }
    fmt.Printf("%s\n", out)
}

google/uuid

google/uuid是Google开发的生成16字节UUID的Golang模块,实现了RFC4122,对UUID的v1、v2、v3、v4等版本都有实现。一般而言要生成唯一序列号的话,通常会使用v4版本。

创建项目并初始化包

$ mkdir test && cd test
$ go mod init test

下载并安装google/uuid到本地GOPATH目录下

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

创建入口文件并测试生成

$ vim main.go
package main

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

func main(){
    id := uuid.New()
    fmt.Printf("%s %s\n",  id, id.Version().String()) // 75381edd-ba50-4ae1-a480-2ef436457601 VERSION_4
    fmt.Printf("%s\n", uuid.New().String()) // c4aa07c3-8bcc-4ac1-9562-72e11bbfd7e8
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值