Golang生成UUID字符串
文章目录
UUID(Universally Unique IDentifier)是一个128位数字的唯一标识。Golang如何生成UUID字符串呢?可以使用github开源的go.uuid来生成。
参考以下代码:
|
|
以上V4表示使用UUID的V4版本,V4 是使用最为广泛的。
UUID的5个版本:
UUID的5个版本,是根据不同的使用场景划分的,而不是根据精度,所以Version5并不会比Version1精度高,在精度上,大家都能保证唯一性,重复的概率近乎于0。
UUID的5个版本英文说明:
-
Version 1, based on timestamp and MAC address (RFC-4122)
-
Version 2, based on timestamp, MAC address and POSIX UID/GID (DCE 1.1)
-
Version 3, based on MD5 hashing of a named value (RFC-4122)
-
Version 4, based on random numbers (RFC-4122)
-
Version 5, based on SHA-1 hashing of a named value (RFC-4122)
我们应该使用UUID哪个版本:
如果只是需要生成一个唯一ID,你可以使用V1或V4。
-
V1基于时间戳和Mac地址,这些ID有一定的规律(你给出一个,是有可能被猜出来下一个是多少的),而且会暴露你的Mac地址。
-
V4是完全随机(伪)的。
如果对于相同的参数需要输出相同的UUID,你可以使用V3或V5。
-
V3基于MD5 hash算法,如果需要考虑与其它系统的兼容性的话,就用它,因为它出来得早,大概率大家都是用它的。
-
V5基于SHA-1 hash算法,这个是首选。
UUID的组成格式
UUID有36个字符组成(32个字母数字+4个连接符"-"),格式为:8-4-4-4-12。
UUID使用16进制表示,详细的格式如: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx。其中M 表示 UUID版本,目前只有五个版本,即只会出现1,2,3,4,5(即UUID的版本号);数字 N 的一至三个最高有效位表示 UUID 变体,目前只会出现 8,9,a,b 四种情况。
例如:5b572392-a8cf-4345-a440-4a5848f3e07d
为什么说UUID是一个128位数字的唯一标识呢?
上文说到UUID是36个字符组成,按一位8bit算,合计位数是(8+4+4+4+12)*8=256位。那为什么说UUID是一个128位数字的唯一标识呢?因为每个字符字母是用的16进制表示,一个16进制只代表4个bit,所以应该是(8+4+4+4+12)*4=128位。
文章作者 HiOFD
上次更新 2024-04-02