本文介绍: Golang 中生成唯一的字符串(UUID,GUID)什么是UUID?通用唯一标识符 (UUID) 是一种特定形式的标识符,在大多数实际用途中可以安全地认为是唯一的。两个正确生成的 UUID 相同的可能性几乎可以忽略不计,即使它们是由不同的各方在两个不同的环境中创建的。这就是为什么说 UUID 是普遍唯一的。UUID 是唯一的(出于实用目的):它重复的概率非常接近零。UUID 不依…
什么是UUID?
通用唯一标识符 (UUID) 是一种特定形式的标识符,在大多数实际用途中可以安全地认为是唯一的。两个正确生成的 UUID 相同的可能性几乎可以忽略不计,即使它们是由不同的各方在两个不同的环境中创建的。这就是为什么说 UUID 是普遍唯一的。
UUID 的字符串表示形式由 32 个十六进制数字组成,以 5 个组显示,由连字符 -
分隔。例如:123e4567-e89b-12d3-a456-426655440000
UUID 的生成有两种
第一种是根据Rand 随机数 来生成UUID
第二种是直接调用UUID库
但其实 第二种的底层源码中 也是调用了Rand库来实现的 可以理解成不是单一的随机数封装
根据Rand 随机数 来生成UUID
// blog: https://www.cnblogs.com/zichliang
package main
import (
"crypto/rand"
"fmt"
"log"
)
func getUUID() (uuid string) {
b := make([]byte, 16)
fmt.Println(b)
_, err := rand.Read(b)
if err != nil {
log.Fatal(err)
}
uuid = fmt.Sprintf("%x-%x-%x-%x-%x",
b[0:4], b[4:6], b[6:8], b[8:10], b[10:])
return
}
func main() {
uuid := getUUID()
fmt.Println(uuid)
}
调用UUID 库
UUID 库基本上分为六种 分别是v1 v2,v3,v4,v5,v6
u1 := uuid.NewV1()
fmt.Println("u1 >>>", u1)
u2 := uuid.NewV2(0)
fmt.Println("u2 >>>", u2)
u3 := uuid.NewV3(u2, "abc")
fmt.Println("u3 >>>", u3)
u4 := uuid.NewV4()
fmt.Println("u4 >>>", u4)
u5 := uuid.NewV5(u2, "abc")
fmt.Println("u5 >>>", u5)
u6 := uuid.Must(u5, nil)
fmt.Println("u6 >>>", u6)
有时候我们需要把一个 uuid的字符串转成UUID可以用到以下方法
s := "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
uuidObject, err := uuid.FromString(s)
if err != nil {
log.Fatalf("failed to parse UUID %q: %v", s, err)
}
fmt.Println("successfully parsed UUID Version", uuidObject)
完整代码
// blog: https://www.cnblogs.com/zichliang
package main
import (
"fmt"
uuid "github.com/satori/go.uuid"
)
func main() {
//返回基于当前时间戳和MAC地址的UUID。
u1 := uuid.NewV1()
fmt.Println("u1 >>>", u1)
//返回基于POSIX UID/GID的DCE安全UUID。
u2 := uuid.NewV2(0)
fmt.Println("u2 >>>", u2)
//返回基于命名空间UUID和名称的MD5哈希的UUID。
u3 := uuid.NewV3(u2, "abc")
fmt.Println("u3 >>>", u3)
//返回随机生成的UUID。
u4 := uuid.NewV4()
fmt.Println("u4 >>>", u4)
//返回基于命名空间UUID和名称的SHA-1哈希的UUID。
u5 := uuid.NewV5(u2, "abc")
fmt.Println("u5 >>>", u5)
//本质上 没有差距 不过更新版本之前 某些方法 是有两个返回值的,Must是基于前者 进行的一个包装
u6 := uuid.Must(u5, nil)
fmt.Println("u6 >>>", u6)
//如果 u5 和 u6 相等,则返回true,否则返回false。
u7 := uuid.Equal(u5, u6)
fmt.Println("u7 >>>", u7)
// 将字符串转换成UUID
s := "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
uuidObject, err := uuid.FromString(s)
if err != nil {
log.Fatalf("failed to parse UUID %q: %v", s, err)
}
fmt.Println("successfully parsed UUID Version", uuidObject)
}
原文地址:https://blog.csdn.net/Zuko_chen/article/details/130037754
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_38910.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。