Go語言:谷歌google的uuid模塊的基本用法

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)》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章