新聞中心
?guid?提供了更簡(jiǎn)便更高性能的唯一數(shù)生成功能。

目前成都創(chuàng)新互聯(lián)公司已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、海拉爾網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
?guid?模塊的設(shè)計(jì)目的在于提供一種使用更簡(jiǎn)便、性能更高效且能滿(mǎn)足絕大多數(shù)業(yè)務(wù)場(chǎng)景的唯一數(shù)生成。?guid?的設(shè)計(jì)比較簡(jiǎn)單,詳情可參考實(shí)現(xiàn)源碼。
使用方式:
import "github.com/GOgf/gf/v2/util/guid"接口文檔:
https://pkg.go.dev/github.com/gogf/gf/v2/util/guid
基本介紹
?guid?通過(guò)?S?方法生成32字節(jié)的唯一數(shù),該方法定義如下:
func S(data ...[]byte) string1、通過(guò)不帶任何參數(shù)的方式使用,該方法生成的唯一數(shù)將會(huì)有以下方式構(gòu)成:
?MAC(7) + PID(4) + TimestampNano(12) + Sequence(3) + RandomString(6) ?
其中:
- ?
MAC?表示當(dāng)前機(jī)器的?MAC?地址哈希值,由7個(gè)字節(jié)構(gòu)成; - ?
PID?表示當(dāng)前機(jī)器的進(jìn)程?ID?哈希值,由4個(gè)字節(jié)構(gòu)成; - ?
TimestampNano?表示當(dāng)前的納秒時(shí)間戳哈希值,由12個(gè)字節(jié)構(gòu)成; - ?
Sequence?表示當(dāng)前進(jìn)程并發(fā)安全的序列號(hào),由3個(gè)字節(jié)構(gòu)成; - ?
RandomString?表示隨機(jī)數(shù),由6個(gè)字節(jié)構(gòu)成;
2、通過(guò)自定義任何參數(shù)的方式使用,該方法生成的唯一數(shù)將會(huì)有以下方式構(gòu)成:
?Data(7/14) + TimestampNano(12) + Sequence(3) + RandomString(3/10) ?
主要說(shuō)明:
- ?
Data?表示自定義的參數(shù),參數(shù)類(lèi)型為?[]byte?,最多支持2個(gè)參數(shù)輸入,由7或14個(gè)字節(jié)構(gòu)成; - 需要注意的是,輸入的自定義參數(shù)需要在業(yè)務(wù)上具有一定的唯一識(shí)別性,使得生成的唯一數(shù)更有價(jià)值;
- 不管每一個(gè)?
[]byte?參數(shù)長(zhǎng)度為多少,最終都將通過(guò)哈希方式生成7個(gè)字節(jié)的哈希值。 - ?
TimestampNano?表示當(dāng)前的納秒時(shí)間戳哈希值,由12個(gè)字節(jié)構(gòu)成; - ?
Sequence?表示當(dāng)前進(jìn)程并發(fā)安全的序列號(hào),由3個(gè)字節(jié)構(gòu)成; - ?
RandomString?表示隨機(jī)數(shù),由3或者10個(gè)字節(jié)構(gòu)成,即: - 如果給定1個(gè)自定義參數(shù),那么剩余的字節(jié)將會(huì)使用隨機(jī)數(shù)占位,長(zhǎng)度為10個(gè)字節(jié);
- 如果給定2個(gè)自定義參數(shù),那么剩余的字節(jié)將會(huì)使用隨機(jī)數(shù)占位,長(zhǎng)度為3個(gè)字節(jié);
示例1,基本使用
package main
import (
"fmt"
"github.com/gogf/gf/v2/util/guid"
)
func main() {
fmt.Printf("TraceId: %s", guid.S())
}執(zhí)行后,輸出結(jié)果為:
TraceId: oa9sdw03dk0c35q9bdwcnz42p00trwfr
示例2,自定義參數(shù)
我們的?SessionId?生成需要具有比較好的唯一性,且需要防止輕易的碰撞,因此可以使用以下方式:
func CreateSessionId(r *ghttp.Request) string {
var (
address = request.RemoteAddr
header = fmt.Sprintf("%v", request.Header)
)
return guid.S([]byte(address), []byte(header))
}可以看到,?SessionId?需要依靠自定義的兩個(gè)輸入?yún)?shù)?RemoteAddr?, ?Header?來(lái)生成,這兩個(gè)參數(shù)在業(yè)務(wù)上具有一定的唯一識(shí)別性,且通過(guò)?guid.S?方法的設(shè)計(jì)構(gòu)成,生成的唯一數(shù)將會(huì)非常隨機(jī)且唯一,既滿(mǎn)足了業(yè)務(wù)需要也保證了安全。
名稱(chēng)欄目:創(chuàng)新互聯(lián)GoFrame教程:GoFrame唯一數(shù)-guid
URL地址:http://www.dlmjj.cn/article/coeedec.html


咨詢(xún)
建站咨詢(xún)
