赞
踩
uuid是谷歌开发的生成16字节UUID的模块,实现了RFC4122;对UUID的v1,v2,v3,v4,v5等各个版本都有实现。一般来说,如果只是要生成唯一序列号的话,通常用v4版本,New()和NewRandom()都可以生成v4, New是对NewRandom的封装把error处理成panics了,但是理论上几乎是不会有发生panics的可能的。
func New() UUID
func NewRandom() (UUID, error)
示例如下:
- package main
-
- import (
- "fmt"
- "github.com/google/uuid"
- )
-
- func main() {
- for i := 0; i < 10; i++ {
- id := uuid.New()
- fmt.Printf("%s %s\n", id, id.Version().String())
- }
-
- for i := 0; i < 10; i++ {
- id2,err := uuid.NewRandom()
- if err != nil{
- fmt.Printf("%v\n", err)
- }
- fmt.Printf("%s %s\n", id2, id2.Version().String())
- }
- }

输出:
adba0f28-8489-4d99-a5c8-a12eb6c960c9 VERSION_4 0b92bb34-34b2-4f21-9bf8-70ac181b39b5 VERSION_4 177b9491-2ad2-4396-8fd3-f7440404f46f VERSION_4 c098c60b-4f98-4fe3-9fc3-7cec9a7c0717 VERSION_4 0b58b54c-a941-47c9-a889-5871e65b223d VERSION_4 96203b6d-b084-483b-af92-e5b2443cc29f VERSION_4 e5b32605-e017-4a22-9acb-5841ad28ebdd VERSION_4 15f9680e-432e-4faa-b631-53b6f7e70e9a VERSION_4 40f82f91-ef81-4303-a59c-58651f972795 VERSION_4 221e71ec-e9d1-4632-a3f6-0275b3a288ae VERSION_4 c1d4908a-9b9c-44fd-90f0-7e232f0e5ff1 VERSION_4 6027e676-b46a-4281-a1e0-b3bf6291998a VERSION_4 da589a0e-e172-4dac-bc4c-fc50c9624a6e VERSION_4 9c1fe414-3bec-4b7a-9187-b80ee97a1e67 VERSION_4 93fc7459-31c2-4dcb-be9a-e3c80d82453d VERSION_4 5339d058-7241-4f74-a6e3-27ad5d32ba74 VERSION_4 ed4efa2b-2954-4f46-bb0c-b65250494bde VERSION_4 a98c5172-a302-4ef2-967e-1029604ffd1f VERSION_4 b316af48-0c67-48bc-bba1-59c8d18f7685 VERSION_4 e4e39e07-3e15-4117-b572-73d553548249 VERSION_4
官方文档上说New方法可能会有panics,但从源码来看基本上没有报错的可能。会不会报错取决于"crypto/rand"的Reader能不能读满到16个随机字节,而Reader又是从Linux操作系统的getrandom(2) 读取若没有则从 /dev/urandom 读取,getrandom(2)的文档说256个字节以内都不会被信号中断,而/dev/urandom的文档也没有说会有报错的可能。所以理论上是没有报错的可能的。
其它uuid版本的使用方法请见:
《Go语言:谷歌google的uuid模块对uuid各个版本的实现(version 1,version 2,version 3,verison 4,version 5)》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。