登录
首页 >  Golang >  Go问答

生成 UUID 的特定模式方法

来源:stackoverflow

时间:2024-03-02 11:06:25 414浏览 收藏

大家好,我们又见面了啊~本文《生成 UUID 的特定模式方法》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我正在尝试以特定模式在 go 中生成 uuid。我正在开发的程序需要生成类似于现有 uuid 字符串的各种 uuid。因此,程序将读取现有的 uuid(其格式将来可能会更改)并生成一个相同格式的新 uuid 来替换现有的 uuid。

我使用了“github.com/satori/go.uuid”包来生成uuid。我正在使用的示例代码如下是我在网上找到的。

由于该程序的多个实例将并行部署,我希望避免生成的 uuid 发生冲突或重复。

package main

import (
"fmt"
"github.com/satori/go.uuid"
)

func main() {
    // Creating UUID Version 4
    // panic on error
    u1 := uuid.Must(uuid.NewV4(), nil)
    fmt.Printf("UUIDv4: %s\n", u1)

    // or error handling
    u2:= uuid.NewV4()

    fmt.Printf("UUIDv4: %s\n", u2)

    /* Formats needed: 
    2286664c688130096c9ce9008e4d97fb
    6abb173a-b134-49f2-aa88-9dff5dab12a1 (This is obtained from the above code)
    C8-3C-9C-64-61-70-62-B9-34-AC-9A-20-C9-EF-1D-6D
    */
}

解决方案


UUID 为 128 位;这是一个足够大的空间,碰撞的可能性极低。

来自https://en.wikipedia.org/wiki/Universally_unique_identifier

当根据标准方法生成时,UUID 在实际用途上是唯一的,与大多数其他编号方案不同,其唯一性不依赖于中央注册机构或生成它们的各方之间的协调。虽然 UUID 重复的概率不为零,但它足够接近于零,可以忽略不计。

因此,任何人都可以创建 UUID 并使用它来识别某些内容,并且几乎可以肯定该标识符不会重复已经或将要创建的用于识别其他内容的标识符。因此,由独立方标记为 UUID 的信息可以随后合并到单个数据库中或在同一通道上传输,而重复的可能性可以忽略不计。

UUID 的全部意义(它们之所以如此之大)是为了避免在不同步的情况下发生冲突。根据同一篇文章,为了达到 50% 的碰撞几率,需要:

每秒生成 10 亿个 UUID,持续约 85 年,而包含这么多 UUID 的文件(每个 UUID 16 字节)将约为 45 艾字节,比目前存在的最大数据库大很多倍,后者约为数百 PB。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>